# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 2011 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
my $errors;
my $file;
my $dir=".";
+my $wlist;
sub checkwarn {
my ($num, $col, $file, $line, $msg, $error) = @_;
$file = shift @ARGV;
-if($file =~ /-D(.*)/) {
- $dir = $1;
- $file = shift @ARGV;
+while(1) {
+
+ if($file =~ /-D(.*)/) {
+ $dir = $1;
+ $file = shift @ARGV;
+ next;
+ }
+ elsif($file =~ /-W(.*)/) {
+ $wlist .= " $1 ";
+ $file = shift @ARGV;
+ next;
+ }
+
+ last;
}
if(!$file) {
print "checksrc.pl [option] <file1> [file2] ...\n";
print " Options:\n";
print " -D[DIR] Directory to prepend file names\n";
+ print " -W[file] Whitelist the given file - ignore all its flaws\n";
exit;
}
do {
- scanfile("$dir/$file");
-
+ if("$wlist" !~ / $file /) {
+ my $fullname = $file;
+ $fullname = "$dir/$file" if ($fullname !~ '^\.?\.?/');
+ scanfile($fullname);
+ }
$file = shift @ARGV;
} while($file);
checkwarn($line, length($1), $file, $l, "Contains TAB character", 1);
}
# detect trailing white space
- if($l =~ /^(\S+)[ \t]+\z/) {
+ if($l =~ /^(.*)[ \t]+\z/) {
checkwarn($line, length($1), $file, $l, "Trailing whitespace");
}
}
# check for "} else"
- if($l =~ /^(.*)\} else/) {
+ if($l =~ /^(.*)\} *else/) {
checkwarn($line, length($1), $file, $l, "else after closing brace on same line");
}
+ # check for "){"
+ if($l =~ /^(.*)\)\{/) {
+ checkwarn($line, length($1)+1, $file, $l, "missing space after close paren");
+ }
+
+ # scan for use of banned functions
+ if($l =~ /^(.*\W)(sprintf|vsprintf|strcat|strncat|gets)\s*\(/) {
+ checkwarn($line, length($1), $file, $l,
+ "use of $2 is banned");
+ }
+
# 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