checkpatch: don't warn on some function pointer return styles
authorJoe Perches <joe@perches.com>
Thu, 3 Apr 2014 21:49:12 +0000 (14:49 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 3 Apr 2014 23:21:12 +0000 (16:21 -0700)
Checks for some function pointer return styles are too strict.  Fix
them.

Multiple spaces after function pointer return types are allowed.
int  (*foo)(int bar)

Spaces after function pointer returns of pointer types are not required.
int *(*foo)(int bar)

Signed-off-by: Joe Perches <joe@perches.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
scripts/checkpatch.pl

index 7d3bc2f..19591af 100755 (executable)
@@ -2848,10 +2848,7 @@ sub process {
 # Function pointer declarations
 # check spacing between type, funcptr, and args
 # canonical declaration is "type (*funcptr)(args...)"
-#
-# the $Declare variable will capture all spaces after the type
-# so check it for trailing missing spaces or multiple spaces
-               if ($line =~ /^.\s*($Declare)\((\s*)\*(\s*)$Ident(\s*)\)(\s*)\(/) {
+               if ($line =~ /^.\s*($Declare)\((\s*)\*(\s*)($Ident)(\s*)\)(\s*)\(/) {
                        my $declare = $1;
                        my $pre_pointer_space = $2;
                        my $post_pointer_space = $3;
@@ -2859,16 +2856,30 @@ sub process {
                        my $post_funcname_space = $5;
                        my $pre_args_space = $6;
 
-                       if ($declare !~ /\s$/) {
+# the $Declare variable will capture all spaces after the type
+# so check it for a missing trailing missing space but pointer return types
+# don't need a space so don't warn for those.
+                       my $post_declare_space = "";
+                       if ($declare =~ /(\s+)$/) {
+                               $post_declare_space = $1;
+                               $declare = rtrim($declare);
+                       }
+                       if ($declare !~ /\*$/ && $post_declare_space =~ /^$/) {
                                WARN("SPACING",
                                     "missing space after return type\n" . $herecurr);
+                               $post_declare_space = " ";
                        }
 
 # unnecessary space "type  (*funcptr)(args...)"
-                       elsif ($declare =~ /\s{2,}$/) {
-                               WARN("SPACING",
-                                    "Multiple spaces after return type\n" . $herecurr);
-                       }
+# This test is not currently implemented because these declarations are
+# equivalent to
+#      int  foo(int bar, ...)
+# and this is form shouldn't/doesn't generate a checkpatch warning.
+#
+#                      elsif ($declare =~ /\s{2,}$/) {
+#                              WARN("SPACING",
+#                                   "Multiple spaces after return type\n" . $herecurr);
+#                      }
 
 # unnecessary space "type ( *funcptr)(args...)"
                        if (defined $pre_pointer_space &&
@@ -2900,7 +2911,7 @@ sub process {
 
                        if (show_type("SPACING") && $fix) {
                                $fixed[$linenr - 1] =~
-                                   s/^(.\s*$Declare)\(\s*\*\s*($Ident)\s*\)\s*\(/rtrim($1) . " " . "\(\*$2\)\("/ex;
+                                   s/^(.\s*)$Declare\s*\(\s*\*\s*$Ident\s*\)\s*\(/$1 . $declare . $post_declare_space . '(*' . $funcname . ')('/ex;
                        }
                }