| // SPDX-License-Identifier: GPL-2.0-only | |
| /// 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. | |
| // 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 depends on (org || report)@ | |
| 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 org@ | |
| p << r.p; | |
| @@ | |
| coccilib.org.print_todo(p[0], "WARNING should use ARRAY_SIZE") | |
| @script:python depends on report@ | |
| p << r.p; | |
| @@ | |
| msg="WARNING: Use ARRAY_SIZE" | |
| coccilib.report.print_report(p[0], msg) | |