Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6
[pandora-kernel.git] / scripts / coccinelle / api / alloc / kzalloc-simple.cocci
1 ///
2 /// Use kzalloc rather than kmalloc followed by memset with 0
3 ///
4 /// This considers some simple cases that are common and easy to validate
5 /// Note in particular that there are no ...s in the rule, so all of the
6 /// matched code has to be contiguous
7 ///
8 // Confidence: High
9 // Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU.  GPLv2.
10 // Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6.  GPLv2.
11 // URL: http://coccinelle.lip6.fr/rules/kzalloc.html
12 // Options: -no_includes -include_headers
13 //
14 // Keywords: kmalloc, kzalloc
15 // Version min: < 2.6.12 kmalloc
16 // Version min:   2.6.14 kzalloc
17 //
18
19 virtual context
20 virtual patch
21 virtual org
22 virtual report
23
24 //----------------------------------------------------------
25 //  For context mode
26 //----------------------------------------------------------
27
28 @depends on context@
29 type T, T2;
30 expression x;
31 expression E1,E2;
32 statement S;
33 @@
34
35 * x = (T)kmalloc(E1,E2);
36   if ((x==NULL) || ...) S
37 * memset((T2)x,0,E1);
38
39 //----------------------------------------------------------
40 //  For patch mode
41 //----------------------------------------------------------
42
43 @depends on patch@
44 type T, T2;
45 expression x;
46 expression E1,E2;
47 statement S;
48 @@
49
50 - x = (T)kmalloc(E1,E2);
51 + x = kzalloc(E1,E2);
52   if ((x==NULL) || ...) S
53 - memset((T2)x,0,E1);
54
55 //----------------------------------------------------------
56 //  For org mode
57 //----------------------------------------------------------
58
59 @r depends on org || report@
60 type T, T2;
61 expression x;
62 expression E1,E2;
63 statement S;
64 position p;
65 @@
66
67  x = (T)kmalloc@p(E1,E2);
68  if ((x==NULL) || ...) S
69  memset((T2)x,0,E1);
70
71 @script:python depends on org@
72 p << r.p;
73 x << r.x;
74 @@
75
76 msg="%s" % (x)
77 msg_safe=msg.replace("[","@(").replace("]",")")
78 coccilib.org.print_todo(p[0], msg_safe)
79
80 @script:python depends on report@
81 p << r.p;
82 x << r.x;
83 @@
84
85 msg="WARNING: kzalloc should be used for %s, instead of kmalloc/memset" % (x)
86 coccilib.report.print_report(p[0], msg)