UBUNTU: Ubuntu-2.6.38-12.51
[linux-flexiantxendom0-natty.git] / scripts / headers_check.pl
index b62c319..7957e7a 100644 (file)
@@ -2,7 +2,7 @@
 #
 # headers_check.pl execute a number of trivial consistency checks
 #
-# Usage: headers_check.pl dir [files...]
+# Usage: headers_check.pl dir arch [files...]
 # dir:   dir to look for included files
 # arch:  architecture
 # files: list of files to check
@@ -28,19 +28,20 @@ my $lineno = 0;
 my $filename;
 
 foreach my $file (@files) {
-       local *FH;
        $filename = $file;
-       open(FH, "<$filename") or die "$filename: $!\n";
+
+       open(my $fh, '<', $filename)
+               or die "$filename: $!\n";
        $lineno = 0;
-       while ($line = <FH>) {
+       while ($line = <$fh>) {
                $lineno++;
                &check_include();
                &check_asm_types();
                &check_sizetypes();
-               &check_prototypes();
-               &check_config();
+               &check_declarations();
+               # Dropped for now. Too much noise &check_config();
        }
-       close FH;
+       close $fh;
 }
 exit $ret;
 
@@ -61,23 +62,28 @@ sub check_include
        }
 }
 
-sub check_prototypes
+sub check_declarations
 {
-       if ($line =~ m/^\s*extern\b/) {
-               printf STDERR "$filename:$lineno: extern's make no sense in userspace\n";
+       if ($line =~m/^(\s*extern|unsigned|char|short|int|long|void)\b/) {
+               printf STDERR "$filename:$lineno: " .
+                             "userspace cannot reference function or " .
+                             "variable defined in the kernel\n";
        }
 }
 
 sub check_config
 {
-       if ($line =~ m/[^a-zA-Z0-9_]+CONFIG_([a-zA-Z0-9]+)[^a-zA-Z0-9]/) {
+       if ($line =~ m/[^a-zA-Z0-9_]+CONFIG_([a-zA-Z0-9_]+)[^a-zA-Z0-9_]/) {
                printf STDERR "$filename:$lineno: leaks CONFIG_$1 to userspace where it is not valid\n";
        }
 }
 
 my $linux_asm_types;
-sub check_asm_types()
+sub check_asm_types
 {
+       if ($filename =~ /types.h|int-l64.h|int-ll64.h/o) {
+               return;
+       }
        if ($lineno == 1) {
                $linux_asm_types = 0;
        } elsif ($linux_asm_types >= 1) {
@@ -95,6 +101,9 @@ sub check_asm_types()
 my $linux_types;
 sub check_sizetypes
 {
+       if ($filename =~ /types.h|int-l64.h|int-ll64.h/o) {
+               return;
+       }
        if ($lineno == 1) {
                $linux_types = 0;
        } elsif ($linux_types >= 1) {