OpenZFS 6459 - cstyle doesn't detect opening braces on the same line as function header

Authored by: Paul Dagnelie <pcd@delphix.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Alex Reece <alex@delphix.com>
Reviewed by: Albert Lee <trisk@omniti.com>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Approved by: Robert Mustacchi <rm@joyent.com>
Ported-by: George Melikov mail@gmelikov.ru

OpenZFS-issue: https://www.illumos.org/issues/6459
OpenZFS-commit: https://github.com/openzfs/openzfs/commit/c4567a6

Porting notes:
These changes are adopted for ZoL codebase because of
many false positive warnings.
This commit is contained in:
Paul Dagnelie 2017-01-18 01:47:50 +03:00 committed by Brian Behlendorf
parent bb7ffdaf5a
commit ec441a9c53
1 changed files with 49 additions and 1 deletions

View File

@ -240,6 +240,7 @@ my $comment_done = 0;
my $in_warlock_comment = 0;
my $in_function = 0;
my $in_function_header = 0;
my $function_header_full_indent = 0;
my $in_declaration = 0;
my $note_level = 0;
my $nextok = 0;
@ -385,6 +386,7 @@ line: while (<$filehandle>) {
$in_function = 1;
$in_declaration = 1;
$in_function_header = 0;
$function_header_full_indent = 0;
$prev = $line;
next line;
}
@ -397,8 +399,54 @@ line: while (<$filehandle>) {
$prev = $line;
next line;
}
if (/^\w*\($/) {
if ($in_function_header && ! /^ ./ ) {
if (/^{}$/ # empty functions
|| /;/ #run function with multiline arguments
|| /#/ #preprocessor commands
|| /^[^\s\\]*\(.*\)$/ #functions without ; at the end
|| /^$/ #function declaration can't have empty line
) {
$in_function_header = 0;
$function_header_full_indent = 0;
} elsif ($prev =~ /^__attribute__/) { #__attribute__((*))
$in_function_header = 0;
$function_header_full_indent = 0;
$prev = $line;
next line;
} elsif ($picky && ! (/^\t/ && $function_header_full_indent != 0)) {
err("continuation line should be indented by 4 spaces");
}
}
#
# If this matches something of form "foo(", it's probably a function
# definition, unless it ends with ") bar;", in which case it's a declaration
# that uses a macro to generate the type.
#
if (/^\w+\(/ && !/\) \w+;/) {
$in_function_header = 1;
if (/\($/) {
$function_header_full_indent = 1;
}
}
if ($in_function_header && /^{$/) {
$in_function_header = 0;
$function_header_full_indent = 0;
$in_function = 1;
}
if ($in_function_header && /\);$/) {
$in_function_header = 0;
$function_header_full_indent = 0;
}
if ($in_function_header && /{$/ ) {
if ($picky == 1) {
err("opening brace on same line as function header");
}
$in_function_header = 0;
$function_header_full_indent = 0;
$in_function = 1;
next line;
}
if ($in_warlock_comment && /\*\//) {