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