1 // SPDX-License-Identifier: GPL-2.0-only 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 10 // Copyright: (C) 2014 Himangi Saraogi. 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 63 @r depends on (org || report)@ 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 76 @script:python depends on org@ 77 p << r.p; 78 @@ 79 80 coccilib.org.print_todo(p[0], "WARNING should use ARRAY_SIZE") 81 82 @script:python depends on report@ 83 p << r.p; 84 @@ 85 86 msg="WARNING: Use ARRAY_SIZE" 87 coccilib.report.print_report(p[0], msg) 88
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.