1/// Use kmemdup rather than duplicating its implementation 2/// 3// Confidence: High 4// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. 5// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. 6// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. 7// URL: http://coccinelle.lip6.fr/ 8// Comments: 9// Options: -no_includes -include_headers 10 11virtual patch 12 13@r1@ 14expression from,to; 15expression flag; 16position p; 17@@ 18 19 to = \(kmalloc@p\|kzalloc@p\)(strlen(from) + 1,flag); 20 21@r2@ 22expression x,from,to; 23expression flag,E1; 24position p; 25@@ 26 27 x = strlen(from) + 1; 28 ... when != \( x = E1 \| from = E1 \) 29 to = \(kmalloc@p\|kzalloc@p\)(x,flag); 30 31@@ 32expression from,to,size,flag; 33position p != {r1.p,r2.p}; 34statement S; 35@@ 36 37- to = \(kmalloc@p\|kzalloc@p\)(size,flag); 38+ to = kmemdup(from,size,flag); 39 if (to==NULL || ...) S 40- memcpy(to, from, size); 41