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 | "externs should be avoided in .c files\n" . $herecurr); | 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 | $stat =~ /^.\s*(?:extern\s+)?$Type\s*$Ident\s*\(\s*([^{]+)\s*\)\s*;/s && | 5904 | $stat =~ /^.\s*(?:extern\s+)?$Type\s*$Ident\s*\(\s*([^{]+)\s*\)\s*;/s && |
| 5904 | $1 ne "void") { | 5905 | $1 ne "void") { |
| 5905 | my $args = trim($1); | 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 | # checks for new __setup's | 5939 | # checks for new __setup's |
| 5916 | if ($rawline =~ /\b__setup\("([^"]*)"/) { | 5940 | if ($rawline =~ /\b__setup\("([^"]*)"/) { |
| 5917 | my $name = $1; | 5941 | my $name = $1; |