summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rwxr-xr-xlib/checksrc.pl37
1 files changed, 28 insertions, 9 deletions
diff --git a/lib/checksrc.pl b/lib/checksrc.pl
index ac7e3847e..bb3495f79 100755
--- a/lib/checksrc.pl
+++ b/lib/checksrc.pl
@@ -370,7 +370,10 @@ sub scanfile {
my $line = 1;
my $prevl="";
- my $l;
+ my $prevpl="";
+ my $l = "";
+ my $prep = 0;
+ my $prevp = 0;
open(R, "<$file") || die "failed to open $file";
my $incomment=0;
@@ -452,6 +455,14 @@ sub scanfile {
# comments
# ------------------------------------------------------------
+ # prev line was a preprocessor **and** ended with a backslash
+ if($prep && ($prevpl =~ /\\ *\z/)) {
+ # this is still a preprocessor line
+ $prep = 1;
+ goto preproc;
+ }
+ $prep = 0;
+
# crude attempt to detect // comments without too many false
# positives
if($l =~ /^(([^"\*]*)[^:"]|)\/\//) {
@@ -459,6 +470,13 @@ sub scanfile {
$line, length($1), $file, $l, "\/\/ comment");
}
+ # detect and strip preprocessor directives
+ if($l =~ /^[ \t]*\#/) {
+ # preprocessor line
+ $prep = 1;
+ goto preproc;
+ }
+
my $nostr = nostrings($l);
# check spaces after for/if/while/function call
if($nostr =~ /^(.*)(for|if|while| ([a-zA-Z0-9_]+)) \((.)/) {
@@ -676,10 +694,9 @@ sub scanfile {
}
}
- # check for open brace first on line but not first column
- # only alert if previous line ended with a close paren and wasn't a cpp
- # line
- if((($prevl =~ /\)\z/) && ($prevl !~ /^ *#/)) && ($l =~ /^( +)\{/)) {
+ # check for open brace first on line but not first column only alert
+ # if previous line ended with a close paren and it wasn't a cpp line
+ if(($prevl =~ /\)\z/) && ($l =~ /^( +)\{/) && !$prevp) {
checkwarn("BRACEPOS",
$line, length($1), $file, $ol, "badly placed open brace");
}
@@ -687,11 +704,11 @@ sub scanfile {
# if the previous line starts with if/while/for AND ends with an open
# brace, or an else statement, check that this line is indented $indent
# more steps, if not a cpp line
- if($prevl =~ /^( *)((if|while|for)\(.*\{|else)\z/) {
+ if(!$prevp && ($prevl =~ /^( *)((if|while|for)\(.*\{|else)\z/)) {
my $first = length($1);
# this line has some character besides spaces
- if(($l !~ /^ *#/) && ($l =~ /^( *)[^ ]/)) {
+ if($l =~ /^( *)[^ ]/) {
my $second = length($1);
my $expect = $first+$indent;
if($expect != $second) {
@@ -786,9 +803,11 @@ sub scanfile {
print STDERR "L: $l\n";
print STDERR "nostr: $nostr\n";
}
-
+ preproc:
$line++;
- $prevl = $ol;
+ $prevp = $prep;
+ $prevl = $ol if(!$prep);
+ $prevpl = $ol if($prep);
}
if(!scalar(@copyright)) {