diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-28 00:27:18 +0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-28 00:27:18 +0400 |
commit | ad60a9333035f2323840b71ab8ad07bbab728faf (patch) | |
tree | c0bee7557b62a0c1c26ede9cb26f1a1785cfd04c /scripts/coccinelle/misc/memcpy-assign.cocci | |
parent | 0ca7ffb356063c5ece847687da457dfe748612a2 (diff) | |
parent | 24f0c2d6ff859fbca45fd765f0d241528bdb4365 (diff) | |
download | linux-ad60a9333035f2323840b71ab8ad07bbab728faf.tar.xz |
Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
Pull misc non-critical kbuild changes from Michal Marek:
- Fix for make TAGS
- Fix for make rpm
- Some new coccinelle semantic patches
* 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
scripts/coccinelle: find constant additions that could be bit ors
coccicheck: Allow to show the executed command line
coccicheck: Allow the user to give a V= (verbose) argument
scripts/coccinelle/misc/memcpy-assign.cocci: Replace memcpy with struct assignment
kbuild: clear KBUILD_SRC when calling 'make' in RPM spec
scripts/coccinelle/misc/semicolon.cocci: Add unneeded semicolon test
scripts/tags.sh: Fix regex syntax for etags
Diffstat (limited to 'scripts/coccinelle/misc/memcpy-assign.cocci')
-rw-r--r-- | scripts/coccinelle/misc/memcpy-assign.cocci | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/scripts/coccinelle/misc/memcpy-assign.cocci b/scripts/coccinelle/misc/memcpy-assign.cocci new file mode 100644 index 000000000000..afd058be497f --- /dev/null +++ b/scripts/coccinelle/misc/memcpy-assign.cocci @@ -0,0 +1,103 @@ +// +// 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; +) + |