[ovs-dev] [PATCH v2] checkpatch: Ignore macro definitions of FOR_EACH

Aaron Conole aconole at redhat.com
Fri Jun 25 17:18:07 UTC 2021


When defining a FOR_EACH macro, checkpatch freaks out and generates a
control block whitespace error.  Create an exception so that it doesn't
generate errors for this case.

Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2020-August/373509.html
Reported-by: Toshiaki Makita <toshiaki.makita1 at gmail.com>
Signed-off-by: Aaron Conole <aconole at redhat.com>
---
 tests/checkpatch.at     |  5 +++++
 utilities/checkpatch.py | 10 +++++++---
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/tests/checkpatch.at b/tests/checkpatch.at
index a51e46e7ae..0718acd995 100755
--- a/tests/checkpatch.at
+++ b/tests/checkpatch.at
@@ -284,6 +284,11 @@ try_checkpatch \
     +     for (init; condition; increment) { \\
     "
 
+try_checkpatch \
+   "COMMON_PATCH_HEADER
+    +#define SOME_FOR_EACH(a, b, c) /* Foo. */
+   "
+
 AT_CLEANUP
 
 
diff --git a/utilities/checkpatch.py b/utilities/checkpatch.py
index ac14da29b1..699fb4b027 100755
--- a/utilities/checkpatch.py
+++ b/utilities/checkpatch.py
@@ -157,6 +157,8 @@ __regex_trailing_whitespace = re.compile(r'[^\S]+$')
 __regex_single_line_feed = re.compile(r'^\f$')
 __regex_for_if_missing_whitespace = re.compile(r' +(%s)[\(]'
                                                % __parenthesized_constructs)
+__regex_hash_define_for_each = re.compile(
+    r'#define [_A-Z]+FOR_*EACH[_A-Z0-9]*\(')
 __regex_for_if_too_much_whitespace = re.compile(r' +(%s)  +[\(]'
                                                 % __parenthesized_constructs)
 __regex_for_if_parens_whitespace = \
@@ -245,9 +247,11 @@ def if_and_for_whitespace_checks(line):
     """
     if skip_block_whitespace_check:
         return True
-    if (__regex_for_if_missing_whitespace.search(line) is not None or
-            __regex_for_if_too_much_whitespace.search(line) is not None or
-            __regex_for_if_parens_whitespace.search(line)):
+    if (__regex_for_if_missing_whitespace.search(line) is not None and
+        __regex_hash_define_for_each.search(line) is None):
+        return False
+    if (__regex_for_if_too_much_whitespace.search(line) is not None or
+        __regex_for_if_parens_whitespace.search(line)):
         return False
     return True
 
-- 
2.31.1



More information about the dev mailing list