GNU Linux-libre 4.14.290-gnu1
[releases.git] / scripts / coccinelle / misc / of_table.cocci
1 // SPDX-License-Identifier: GPL-2.0
2 /// Make sure (of/i2c/platform)_device_id tables are NULL terminated
3 //
4 // Keywords: of_table i2c_table platform_table
5 // Confidence: Medium
6 // Options: --include-headers
7
8 virtual patch
9 virtual context
10 virtual org
11 virtual report
12
13 @depends on context@
14 identifier var, arr;
15 expression E;
16 @@
17 (
18 struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
19         ...,
20         {
21         .var = E,
22 *       }
23 };
24 |
25 struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
26         ...,
27 *       { ..., E, ... },
28 };
29 )
30
31 @depends on patch@
32 identifier var, arr;
33 expression E;
34 @@
35 (
36 struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
37         ...,
38         {
39         .var = E,
40 -       }
41 +       },
42 +       { }
43 };
44 |
45 struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
46         ...,
47         { ..., E, ... },
48 +       { },
49 };
50 )
51
52 @r depends on org || report@
53 position p1;
54 identifier var, arr;
55 expression E;
56 @@
57 (
58 struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
59         ...,
60         {
61         .var = E,
62         }
63         @p1
64 };
65 |
66 struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
67         ...,
68         { ..., E, ... }
69         @p1
70 };
71 )
72
73 @script:python depends on org@
74 p1 << r.p1;
75 arr << r.arr;
76 @@
77
78 cocci.print_main(arr,p1)
79
80 @script:python depends on report@
81 p1 << r.p1;
82 arr << r.arr;
83 @@
84
85 msg = "%s is not NULL terminated at line %s" % (arr, p1[0].line)
86 coccilib.report.print_report(p1[0],msg)