| // | |
| // Replace memcpy with struct assignment. | |
| // | |
| // Confidence: High | |
| // Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2. | |
| // URL: http://coccinelle.lip6.fr/ | |
| // Comments: | |
| // Options: --no-includes --include-headers | |
| virtual patch | |
| virtual report | |
| virtual context | |
| virtual org | |
| @r1 depends on !patch@ | |
| identifier struct_name; | |
| struct struct_name to; | |
| struct struct_name from; | |
| struct struct_name *top; | |
| struct struct_name *fromp; | |
| position p; | |
| @@ | |
| memcpy@p(\(&(to)\|top\), \(&(from)\|fromp\), \(sizeof(to)\|sizeof(from)\|sizeof(struct struct_name)\|sizeof(*top)\|sizeof(*fromp)\)) | |
| @script:python depends on report@ | |
| p << r1.p; | |
| @@ | |
| coccilib.report.print_report(p[0],"Replace memcpy with struct assignment") | |
| @depends on context@ | |
| position r1.p; | |
| @@ | |
| *memcpy@p(...); | |
| @script:python depends on org@ | |
| p << r1.p; | |
| @@ | |
| cocci.print_main("Replace memcpy with struct assignment",p) | |
| @depends on patch@ | |
| identifier struct_name; | |
| struct struct_name to; | |
| struct struct_name from; | |
| @@ | |
| ( | |
| -memcpy(&(to), &(from), sizeof(to)); | |
| +to = from; | |
| | | |
| -memcpy(&(to), &(from), sizeof(from)); | |
| +to = from; | |
| | | |
| -memcpy(&(to), &(from), sizeof(struct struct_name)); | |
| +to = from; | |
| ) | |
| @depends on patch@ | |
| identifier struct_name; | |
| struct struct_name to; | |
| struct struct_name *from; | |
| @@ | |
| ( | |
| -memcpy(&(to), from, sizeof(to)); | |
| +to = *from; | |
| | | |
| -memcpy(&(to), from, sizeof(*from)); | |
| +to = *from; | |
| | | |
| -memcpy(&(to), from, sizeof(struct struct_name)); | |
| +to = *from; | |
| ) | |
| @depends on patch@ | |
| identifier struct_name; | |
| struct struct_name *to; | |
| struct struct_name from; | |
| @@ | |
| ( | |
| -memcpy(to, &(from), sizeof(*to)); | |
| + *to = from; | |
| | | |
| -memcpy(to, &(from), sizeof(from)); | |
| + *to = from; | |
| | | |
| -memcpy(to, &(from), sizeof(struct struct_name)); | |
| + *to = from; | |
| ) | |
| @depends on patch@ | |
| identifier struct_name; | |
| struct struct_name *to; | |
| struct struct_name *from; | |
| @@ | |
| ( | |
| -memcpy(to, from, sizeof(*to)); | |
| + *to = *from; | |
| | | |
| -memcpy(to, from, sizeof(*from)); | |
| + *to = *from; | |
| | | |
| -memcpy(to, from, sizeof(struct struct_name)); | |
| + *to = *from; | |
| ) | |