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