Commit | Line | Data |
---|---|---|
7f904d7e | 1 | // SPDX-License-Identifier: GPL-2.0-only |
7ab04ea0 HS |
2 | /// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element |
3 | /// | |
4 | //# This makes an effort to find cases where ARRAY_SIZE can be used such as | |
5 | //# where there is a division of sizeof the array by the sizeof its first | |
6 | //# element or by any indexed element or the element type. It replaces the | |
7 | //# division of the two sizeofs by ARRAY_SIZE. | |
8 | // | |
9 | // Confidence: High | |
7f904d7e | 10 | // Copyright: (C) 2014 Himangi Saraogi. |
7ab04ea0 HS |
11 | // Comments: |
12 | // Options: --no-includes --include-headers | |
13 | ||
14 | virtual patch | |
15 | virtual context | |
16 | virtual org | |
17 | virtual report | |
18 | ||
19 | @i@ | |
20 | @@ | |
21 | ||
22 | #include <linux/kernel.h> | |
23 | ||
24 | //---------------------------------------------------------- | |
25 | // For context mode | |
26 | //---------------------------------------------------------- | |
27 | ||
28 | @depends on i&&context@ | |
29 | type T; | |
30 | T[] E; | |
31 | @@ | |
32 | ( | |
33 | * (sizeof(E)/sizeof(*E)) | |
34 | | | |
35 | * (sizeof(E)/sizeof(E[...])) | |
36 | | | |
37 | * (sizeof(E)/sizeof(T)) | |
38 | ) | |
39 | ||
40 | //---------------------------------------------------------- | |
41 | // For patch mode | |
42 | //---------------------------------------------------------- | |
43 | ||
44 | @depends on i&&patch@ | |
45 | type T; | |
46 | T[] E; | |
47 | @@ | |
48 | ( | |
49 | - (sizeof(E)/sizeof(*E)) | |
50 | + ARRAY_SIZE(E) | |
51 | | | |
52 | - (sizeof(E)/sizeof(E[...])) | |
53 | + ARRAY_SIZE(E) | |
54 | | | |
55 | - (sizeof(E)/sizeof(T)) | |
56 | + ARRAY_SIZE(E) | |
57 | ) | |
58 | ||
59 | //---------------------------------------------------------- | |
60 | // For org and report mode | |
61 | //---------------------------------------------------------- | |
62 | ||
c7eaa887 | 63 | @r depends on (org || report)@ |
7ab04ea0 HS |
64 | type T; |
65 | T[] E; | |
66 | position p; | |
67 | @@ | |
68 | ( | |
69 | (sizeof(E)@p /sizeof(*E)) | |
70 | | | |
71 | (sizeof(E)@p /sizeof(E[...])) | |
72 | | | |
73 | (sizeof(E)@p /sizeof(T)) | |
74 | ) | |
75 | ||
cb00a4f3 | 76 | @script:python depends on org@ |
7ab04ea0 HS |
77 | p << r.p; |
78 | @@ | |
79 | ||
80 | coccilib.org.print_todo(p[0], "WARNING should use ARRAY_SIZE") | |
81 | ||
cb00a4f3 | 82 | @script:python depends on report@ |
7ab04ea0 HS |
83 | p << r.p; |
84 | @@ | |
85 | ||
86 | msg="WARNING: Use ARRAY_SIZE" | |
87 | coccilib.report.print_report(p[0], msg) | |
88 |