1/// Use kstrdup 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@@ 14expression from,to; 15expression flag,E1,E2; 16statement S; 17@@ 18 19- to = kmalloc(strlen(from) + 1,flag); 20+ to = kstrdup(from, flag); 21 ... when != \(from = E1 \| to = E1 \) 22 if (to==NULL || ...) S 23 ... when != \(from = E2 \| to = E2 \) 24- strcpy(to, from); 25 26@@ 27expression x,from,to; 28expression flag,E1,E2,E3; 29statement S; 30@@ 31 32- x = strlen(from) + 1; 33 ... when != \( x = E1 \| from = E1 \) 34- to = \(kmalloc\|kzalloc\)(x,flag); 35+ to = kstrdup(from, flag); 36 ... when != \(x = E2 \| from = E2 \| to = E2 \) 37 if (to==NULL || ...) S 38 ... when != \(x = E3 \| from = E3 \| to = E3 \) 39- memcpy(to, from, x); 40