104 lines
		
	
	
	
		
			1.9 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			104 lines
		
	
	
	
		
			1.9 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
|   | // | ||
|  | // 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; | ||
|  | ) | ||
|  | 
 |