#
# 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
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;
}
}
-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) {
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) {