1/// Use kmemdup rather than duplicating its implementation 2/// 3// Confidence: High 4// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 5// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 6// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 7// URL: http://coccinelle.lip6.fr/ 8// Comments: 9// Options: --no-includes --include-headers 10 11virtual patch 12virtual context 13virtual org 14virtual report 15 16@r1@ 17expression from,to; 18expression flag; 19position p; 20@@ 21 22 to = \(kmalloc@p\|kzalloc@p\)(strlen(from) + 1,flag); 23 24@r2@ 25expression x,from,to; 26expression flag,E1; 27position p; 28@@ 29 30 x = strlen(from) + 1; 31 ... when != \( x = E1 \| from = E1 \) 32 to = \(kmalloc@p\|kzalloc@p\)(x,flag); 33 34@depends on patch@ 35expression from,to,size,flag; 36position p != {r1.p,r2.p}; 37statement S; 38@@ 39 40- to = \(kmalloc@p\|kzalloc@p\)(size,flag); 41+ to = kmemdup(from,size,flag); 42 if (to==NULL || ...) S 43- memcpy(to, from, size); 44 45@r depends on !patch@ 46expression from,to,size,flag; 47position p != {r1.p,r2.p}; 48statement S; 49@@ 50 51* to = \(kmalloc@p\|kzalloc@p\)(size,flag); 52 if (to==NULL || ...) S 53* memcpy(to, from, size); 54 55@script:python depends on org@ 56p << r.p; 57@@ 58 59coccilib.org.print_todo(p[0], "WARNING opportunity for kmemdup") 60 61@script:python depends on report@ 62p << r.p; 63@@ 64 65coccilib.report.print_report(p[0], "WARNING opportunity for kmemdup") 66