12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element
- ///
- //# This makes an effort to find cases where ARRAY_SIZE can be used such as
- //# where there is a division of sizeof the array by the sizeof its first
- //# element or by any indexed element or the element type. It replaces the
- //# division of the two sizeofs by ARRAY_SIZE.
- //
- // Confidence: High
- // Copyright: (C) 2014 Himangi Saraogi. GPLv2.
- // Comments:
- // Options: --no-includes --include-headers
- virtual patch
- virtual context
- virtual org
- virtual report
- @i@
- @@
- #include <linux/kernel.h>
- //----------------------------------------------------------
- // For context mode
- //----------------------------------------------------------
- @depends on i&&context@
- type T;
- T[] E;
- @@
- (
- * (sizeof(E)/sizeof(*E))
- |
- * (sizeof(E)/sizeof(E[...]))
- |
- * (sizeof(E)/sizeof(T))
- )
- //----------------------------------------------------------
- // For patch mode
- //----------------------------------------------------------
- @depends on i&&patch@
- type T;
- T[] E;
- @@
- (
- - (sizeof(E)/sizeof(*E))
- + ARRAY_SIZE(E)
- |
- - (sizeof(E)/sizeof(E[...]))
- + ARRAY_SIZE(E)
- |
- - (sizeof(E)/sizeof(T))
- + ARRAY_SIZE(E)
- )
- //----------------------------------------------------------
- // For org and report mode
- //----------------------------------------------------------
- @r@
- type T;
- T[] E;
- position p;
- @@
- (
- (sizeof(E)@p /sizeof(*E))
- |
- (sizeof(E)@p /sizeof(E[...]))
- |
- (sizeof(E)@p /sizeof(T))
- )
- @script:python depends on i&&org@
- p << r.p;
- @@
- coccilib.org.print_todo(p[0], "WARNING should use ARRAY_SIZE")
- @script:python depends on i&&report@
- p << r.p;
- @@
- msg="WARNING: Use ARRAY_SIZE"
- coccilib.report.print_report(p[0], msg)
|