summaryrefslogtreecommitdiff
path: root/v4l/scripts/check.pl
diff options
context:
space:
mode:
Diffstat (limited to 'v4l/scripts/check.pl')
-rwxr-xr-xv4l/scripts/check.pl77
1 files changed, 72 insertions, 5 deletions
diff --git a/v4l/scripts/check.pl b/v4l/scripts/check.pl
index 3e6eb6e47..4958e281b 100755
--- a/v4l/scripts/check.pl
+++ b/v4l/scripts/check.pl
@@ -1,14 +1,46 @@
#!/usr/bin/perl
+use Getopt::Std;
+use strict;
+
+my $c_syntax=0;
+my $fmt="--emacs";
+
+my %opt;
+
+sub usage ($)
+{
+ my $name = shift;
+ printf "Usage: %s [<args>] [<file>]\n".
+ "\t-c\tc style\n".
+ "\t-e\emacs style (default)\n".
+ "\t-t\terse style (default)\n".
+ "\t<file>\tfile name to open. If file not specified, uses hg diff\n\n", $name;
+
+ exit -1;
+}
+
+if (not getopts('cet',\%opt) or defined $opt{'h'}) {
+ usage($0);
+}
my $cmd=shift;
+if ($opt{'c'}) {
+ $c_syntax=1;
+}
+
+if ($opt{'t'}) {
+ $fmt="--terse";
+ $c_syntax=0;
+}
+
if ($cmd) {
$cmd="diff -upr /dev/null $cmd";
} else {
$cmd="hg diff";
}
-$checkpatch=$ENV{CHECKPATCH};
+my $checkpatch=$ENV{CHECKPATCH};
if (!$checkpatch) {
$checkpatch="/lib/modules/`uname -r`/build/scripts/checkpatch.pl";
@@ -43,9 +75,44 @@ while (<IN>) {
}
close IN;
-open IN,"$cmd | $checkpatch -q --nosignoff --emacs -|";
-while (<IN>) {
- s|#[\d]+:\s*FILE:\s*|../|;
- print "$_";
+open IN,"$cmd | $checkpatch -q --nosignoff $fmt -|";
+
+my $err="";
+my $errline="";
+my $file="";
+my $ln_numb;
+
+my $pwd=`pwd`;
+$pwd =~ s|/[^/]+\n$||;
+
+sub print_err()
+{
+ if ($err) {
+ printf STDERR "%s/%s: In '%s':\n", $pwd, $file, $errline;
+ printf STDERR "%s/%s:%d: %s\n", $pwd, $file, $ln_numb, $err;
+ $err="";
+ }
+}
+
+if ($c_syntax == 0) {
+ while (<IN>) {
+ s|^#[\d]+:\s*FILE:\s*|../|;
+ print "$_";
+ }
+} else {
+ while (<IN>) {
+ if (m/^\+(.*)\n/) {
+ $errline=$1;
+ } elsif (m/^\#\s*[\d]+\s*:\s*FILE:\s*([^\:]+)\:([\d]+)/) {
+ $file=$1;
+ $ln_numb=$2;
+ } elsif (m/^\-\s*\:\d+\:\s*(.*)\n/) {
+ print_err();
+ $err = $1;
+ $err =~ s/WARNING/warning/;
+ }
+# print "# $_";
+ }
}
close IN;
+print_err();