scripts/coccinelle/misc/memcpy-assign.cocci: Replace memcpy with struct assignment
[linux-3.10.git] / scripts / coccinelle / misc / memcpy-assign.cocci
1 //
2 // Replace memcpy with struct assignment.
3 //
4 // Confidence: High
5 // Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6.  GPLv2.
6 // URL: http://coccinelle.lip6.fr/
7 // Comments:
8 // Options: --no-includes --include-headers
9
10 virtual patch
11 virtual report
12 virtual context
13 virtual org
14
15 @r1 depends on !patch@
16 identifier struct_name;
17 struct struct_name to;
18 struct struct_name from;
19 struct struct_name *top;
20 struct struct_name *fromp;
21 position p;
22 @@
23 memcpy@p(\(&(to)\|top\), \(&(from)\|fromp\), \(sizeof(to)\|sizeof(from)\|sizeof(struct struct_name)\|sizeof(*top)\|sizeof(*fromp)\))
24
25 @script:python depends on report@
26 p << r1.p;
27 @@
28 coccilib.report.print_report(p[0],"Replace memcpy with struct assignment")
29
30 @depends on context@
31 position r1.p;
32 @@
33 *memcpy@p(...);
34
35 @script:python depends on org@
36 p << r1.p;
37 @@
38 cocci.print_main("Replace memcpy with struct assignment",p)
39
40 @depends on patch@
41 identifier struct_name;
42 struct struct_name to;
43 struct struct_name from;
44 @@
45 (
46 -memcpy(&(to), &(from), sizeof(to));
47 +to = from;
48 |
49 -memcpy(&(to), &(from), sizeof(from));
50 +to = from;
51 |
52 -memcpy(&(to), &(from), sizeof(struct struct_name));
53 +to = from;
54 )
55
56 @depends on patch@
57 identifier struct_name;
58 struct struct_name to;
59 struct struct_name *from;
60 @@
61 (
62 -memcpy(&(to), from, sizeof(to));
63 +to = *from;
64 |
65 -memcpy(&(to), from, sizeof(*from));
66 +to = *from;
67 |
68 -memcpy(&(to), from, sizeof(struct struct_name));
69 +to = *from;
70 )
71
72 @depends on patch@
73 identifier struct_name;
74 struct struct_name *to;
75 struct struct_name from;
76 @@
77 (
78 -memcpy(to, &(from), sizeof(*to));
79 + *to = from;
80 |
81 -memcpy(to, &(from), sizeof(from));
82 + *to = from;
83 |
84 -memcpy(to, &(from), sizeof(struct struct_name));
85 + *to = from;
86 )
87
88 @depends on patch@
89 identifier struct_name;
90 struct struct_name *to;
91 struct struct_name *from;
92 @@
93 (
94 -memcpy(to, from, sizeof(*to));
95 + *to = *from;
96 |
97 -memcpy(to, from, sizeof(*from));
98 + *to = *from;
99 |
100 -memcpy(to, from, sizeof(struct struct_name));
101 + *to = *from;
102 )
103