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