scripts/coccinelle/api/simple_open.cocci: semantic patch for simple_open()
[linux-2.6.git] / scripts / coccinelle / api / simple_open.cocci
1 /// This removes an open coded simple_open() function
2 /// and replaces file operations references to the function
3 /// with simple_open() instead.
4 ///
5 // Confidence: High
6 // Comments:
7 // Options: -no_includes -include_headers
8
9 virtual patch
10 virtual report
11
12 @ open depends on patch @
13 identifier open_f != simple_open;
14 identifier i, f;
15 @@
16 -int open_f(struct inode *i, struct file *f)
17 -{
18 (
19 -if (i->i_private)
20 -f->private_data = i->i_private;
21 |
22 -f->private_data = i->i_private;
23 )
24 -return 0;
25 -}
26
27 @ has_open depends on open @
28 identifier fops;
29 identifier open.open_f;
30 @@
31 struct file_operations fops = {
32 ...,
33 -.open = open_f,
34 +.open = simple_open,
35 ...
36 };
37
38 @ openr depends on report @
39 identifier open_f != simple_open;
40 identifier i, f;
41 position p;
42 @@
43 int open_f@p(struct inode *i, struct file *f)
44 {
45 (
46 if (i->i_private)
47 f->private_data = i->i_private;
48 |
49 f->private_data = i->i_private;
50 )
51 return 0;
52 }
53
54 @ has_openr depends on openr @
55 identifier fops;
56 identifier openr.open_f;
57 position p;
58 @@
59 struct file_operations fops = {
60 ...,
61 .open = open_f@p,
62 ...
63 };
64
65 @script:python@
66 pf << openr.p;
67 ps << has_openr.p;
68 @@
69
70 coccilib.report.print_report(pf[0],"WARNING opportunity for simple_open, see also structure on line %s"%(ps[0].line))