| // |
| // 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; |
| ) |
| |