Linux 4.8.3
[linux/fpc-iii.git] / scripts / coccinelle / api / kstrdup.cocci
blob09cba54ed0cfdb3f788e6ea1eadcf1e7cd158012
1 /// Use kstrdup 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
11 virtual patch
12 virtual context
13 virtual org
14 virtual report
16 @depends on patch@
17 expression from,to;
18 expression flag,E1,E2;
19 statement S;
22 -  to = kmalloc(strlen(from) + 1,flag);
23 +  to = kstrdup(from, flag);
24    ... when != \(from = E1 \| to = E1 \)
25    if (to==NULL || ...) S
26    ... when != \(from = E2 \| to = E2 \)
27 -  strcpy(to, from);
29 @depends on patch@
30 expression x,from,to;
31 expression flag,E1,E2,E3;
32 statement S;
35 -   x = strlen(from) + 1;
36     ... when != \( x = E1 \| from = E1 \)
37 -   to = \(kmalloc\|kzalloc\)(x,flag);
38 +   to = kstrdup(from, flag);
39     ... when != \(x = E2 \| from = E2 \| to = E2 \)
40     if (to==NULL || ...) S
41     ... when != \(x = E3 \| from = E3 \| to = E3 \)
42 -   memcpy(to, from, x);
44 // ---------------------------------------------------------------------
46 @r1 depends on !patch exists@
47 expression from,to;
48 expression flag,E1,E2;
49 statement S;
50 position p1,p2;
53 *  to = kmalloc@p1(strlen(from) + 1,flag);
54    ... when != \(from = E1 \| to = E1 \)
55    if (to==NULL || ...) S
56    ... when != \(from = E2 \| to = E2 \)
57 *  strcpy@p2(to, from);
59 @r2 depends on !patch exists@
60 expression x,from,to;
61 expression flag,E1,E2,E3;
62 statement S;
63 position p1,p2;
66 *   x = strlen(from) + 1;
67     ... when != \( x = E1 \| from = E1 \)
68 *   to = \(kmalloc@p1\|kzalloc@p2\)(x,flag);
69     ... when != \(x = E2 \| from = E2 \| to = E2 \)
70     if (to==NULL || ...) S
71     ... when != \(x = E3 \| from = E3 \| to = E3 \)
72 *   memcpy@p2(to, from, x);
74 @script:python depends on org@
75 p1 << r1.p1;
76 p2 << r1.p2;
79 cocci.print_main("WARNING opportunity for kstrdep",p1)
80 cocci.print_secs("strcpy",p2)
82 @script:python depends on org@
83 p1 << r2.p1;
84 p2 << r2.p2;
87 cocci.print_main("WARNING opportunity for kstrdep",p1)
88 cocci.print_secs("memcpy",p2)
90 @script:python depends on report@
91 p1 << r1.p1;
92 p2 << r1.p2;
95 msg = "WARNING opportunity for kstrdep (strcpy on line %s)" % (p2[0].line)
96 coccilib.report.print_report(p1[0], msg)
98 @script:python depends on report@
99 p1 << r2.p1;
100 p2 << r2.p2;
103 msg = "WARNING opportunity for kstrdep (memcpy on line %s)" % (p2[0].line)
104 coccilib.report.print_report(p1[0], msg)