diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/headers_check.pl | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/scripts/headers_check.pl b/scripts/headers_check.pl index 7957e7a5166a..64ac2380e4d5 100644 --- a/scripts/headers_check.pl +++ b/scripts/headers_check.pl | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | # 3) Check for leaked CONFIG_ symbols | 19 | # 3) Check for leaked CONFIG_ symbols |
| 20 | 20 | ||
| 21 | use strict; | 21 | use strict; |
| 22 | use File::Basename; | ||
| 22 | 23 | ||
| 23 | my ($dir, $arch, @files) = @ARGV; | 24 | my ($dir, $arch, @files) = @ARGV; |
| 24 | 25 | ||
| @@ -99,6 +100,39 @@ sub check_asm_types | |||
| 99 | } | 100 | } |
| 100 | 101 | ||
| 101 | my $linux_types; | 102 | my $linux_types; |
| 103 | my %import_stack = (); | ||
| 104 | sub check_include_typesh | ||
| 105 | { | ||
| 106 | my $path = $_[0]; | ||
| 107 | my $import_path; | ||
| 108 | |||
| 109 | my $fh; | ||
| 110 | my @file_paths = ($path, $dir . "/" . $path, dirname($filename) . "/" . $path); | ||
| 111 | for my $possible ( @file_paths ) { | ||
| 112 | if (not $import_stack{$possible} and open($fh, '<', $possible)) { | ||
| 113 | $import_path = $possible; | ||
| 114 | $import_stack{$import_path} = 1; | ||
| 115 | last; | ||
| 116 | } | ||
| 117 | } | ||
| 118 | if (eof $fh) { | ||
| 119 | return; | ||
| 120 | } | ||
| 121 | |||
| 122 | my $line; | ||
| 123 | while ($line = <$fh>) { | ||
| 124 | if ($line =~ m/^\s*#\s*include\s+<linux\/types.h>/) { | ||
| 125 | $linux_types = 1; | ||
| 126 | last; | ||
| 127 | } | ||
| 128 | if (my $included = ($line =~ /^\s*#\s*include\s+[<"](\S+)[>"]/)[0]) { | ||
| 129 | check_include_typesh($included); | ||
| 130 | } | ||
| 131 | } | ||
| 132 | close $fh; | ||
| 133 | delete $import_stack{$import_path}; | ||
| 134 | } | ||
| 135 | |||
| 102 | sub check_sizetypes | 136 | sub check_sizetypes |
| 103 | { | 137 | { |
| 104 | if ($filename =~ /types.h|int-l64.h|int-ll64.h/o) { | 138 | if ($filename =~ /types.h|int-l64.h|int-ll64.h/o) { |
| @@ -113,6 +147,9 @@ sub check_sizetypes | |||
| 113 | $linux_types = 1; | 147 | $linux_types = 1; |
| 114 | return; | 148 | return; |
| 115 | } | 149 | } |
| 150 | if (my $included = ($line =~ /^\s*#\s*include\s+[<"](\S+)[>"]/)[0]) { | ||
| 151 | check_include_typesh($included); | ||
| 152 | } | ||
| 116 | if ($line =~ m/__[us](8|16|32|64)\b/) { | 153 | if ($line =~ m/__[us](8|16|32|64)\b/) { |
| 117 | printf STDERR "$filename:$lineno: " . | 154 | printf STDERR "$filename:$lineno: " . |
| 118 | "found __[us]{8,16,32,64} type " . | 155 | "found __[us]{8,16,32,64} type " . |
| @@ -122,4 +159,3 @@ sub check_sizetypes | |||
| 122 | #$ret = 1; | 159 | #$ret = 1; |
| 123 | } | 160 | } |
| 124 | } | 161 | } |
| 125 | |||
