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