| /// 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) |
| |