Add a block that identifies multiple line function definitions. Save the function name into $context_function to improve the embedded function name test. Look for misplaced open brace on the function definition. Emit an OPEN_BRACE error when the function definition is similar to void foo(int arg1, int arg2) { Miscellanea: o Remove the $realfile test in function declaration w/o named arguments test o Comment the function declaration w/o named arguments test
Showing the changes to scripts/checkpatch.pl (1 of 1 file). Show all
Unified · Split
| @@ -5899,7 +5899,8 @@ sub process { · 5898 unmodified lines | ||
| 5899 | 5899 | "externs should be avoided in .c files\n" . $herecurr); |
| 5900 | 5900 | } |
| 5901 | 5901 | |
| 5902 | − if ($realfile =~ /\.[ch]$/ && defined $stat && | |
| 5902 | +# check for function declarations that have arguments without identifier names | |
| 5903 | + if (defined $stat && | |
| 5903 | 5904 | $stat =~ /^.\s*(?:extern\s+)?$Type\s*$Ident\s*\(\s*([^{]+)\s*\)\s*;/s && |
| 5904 | 5905 | $1 ne "void") { |
| 5905 | 5906 | my $args = trim($1); |
| @@ -5912,6 +5913,29 @@ sub process { · 6 unmodified lines | ||
| 5912 | 5913 | } |
| 5913 | 5914 | } |
| 5914 | 5915 | |
| 5916 | +# check for function definitions | |
| 5917 | + if ($^V && $^V ge 5.10.0 && | |
| 5918 | + defined $stat && | |
| 5919 | + $stat =~ /^.\s*(?:$Storage\s+)?$Type\s*($Ident)\s*$balanced_parens\s*{/s) { | |
| 5920 | + $context_function = $1; | |
| 5921 | + | |
| 5922 | +# check for multiline function definition with misplaced open brace | |
| 5923 | + my $ok = 0; | |
| 5924 | + my $cnt = statement_rawlines($stat); | |
| 5925 | + my $herectx = $here . "\n"; | |
| 5926 | + for (my $n = 0; $n < $cnt; $n++) { | |
| 5927 | + my $rl = raw_line($linenr, $n); | |
| 5928 | + $herectx .= $rl . "\n"; | |
| 5929 | + $ok = 1 if ($rl =~ /^[ \+]\{/); | |
| 5930 | + $ok = 1 if ($rl =~ /\{/ && $n == 0); | |
| 5931 | + last if $rl =~ /^[ \+].*\{/; | |
| 5932 | + } | |
| 5933 | + if (!$ok) { | |
| 5934 | + ERROR("OPEN_BRACE", | |
| 5935 | + "open brace '{' following function definitions go on the next line\n" . $herectx); | |
| 5936 | + } | |
| 5937 | + } | |
| 5938 | + | |
| 5915 | 5939 | # checks for new __setup's |
| 5916 | 5940 | if ($rawline =~ /\b__setup\("([^"]*)"/) { |
| 5917 | 5941 | my $name = $1; |