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 13virtual patch 14virtual context 15virtual org 16virtual report 17 18@i@ 19@@ 20 21#include <include/misc/util.h> 22 23//---------------------------------------------------------- 24// For context mode 25//---------------------------------------------------------- 26 27@depends on i&&context && !(file in "ext")@ 28type T; 29T[] 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 && !(file in "ext")@ 44type T; 45T[] 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 62@r depends on (org || report) && !(file in "ext")@ 63type T; 64T[] E; 65position 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 org@ 76p << r.p; 77@@ 78 79coccilib.org.print_todo(p[0], "WARNING should use ARRAY_SIZE") 80 81@script:python depends on report@ 82p << r.p; 83@@ 84 85msg="WARNING: Use ARRAY_SIZE" 86coccilib.report.print_report(p[0], msg) 87