Commit f75a8df3bd6466e29a4e40b86b2cfc96fe06d328
Committed by
Michal Marek
1 parent
875de98623
Exists in
master
and in
20 other branches
headers_check: recursively search for linux/types.h inclusion
headers_check.pl currently emits some spurious warnings, especially for the drm headers, about using __[us]{8,16,32,64} types without including linux/types.h. Recursively search for types.h inclusion, avoiding circular references. Signed-off-by: Bobby Powers <bobbypowers@gmail.com> Cc: Sam Ravnborg <sam@ravnborg.org> Cc: Dave Airlie <airlied@linux.ie> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Michal Marek <mmarek@suse.cz>
Showing 1 changed file with 37 additions and 1 deletions Side-by-side Diff
scripts/headers_check.pl
... | ... | @@ -19,6 +19,7 @@ |
19 | 19 | # 3) Check for leaked CONFIG_ symbols |
20 | 20 | |
21 | 21 | use strict; |
22 | +use File::Basename; | |
22 | 23 | |
23 | 24 | my ($dir, $arch, @files) = @ARGV; |
24 | 25 | |
... | ... | @@ -99,6 +100,39 @@ |
99 | 100 | } |
100 | 101 | |
101 | 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 | 136 | sub check_sizetypes |
103 | 137 | { |
104 | 138 | if ($filename =~ /types.h|int-l64.h|int-ll64.h/o) { |
... | ... | @@ -112,6 +146,9 @@ |
112 | 146 | if ($line =~ m/^\s*#\s*include\s+<linux\/types.h>/) { |
113 | 147 | $linux_types = 1; |
114 | 148 | return; |
149 | + } | |
150 | + if (my $included = ($line =~ /^\s*#\s*include\s+[<"](\S+)[>"]/)[0]) { | |
151 | + check_include_typesh($included); | |
115 | 152 | } |
116 | 153 | if ($line =~ m/__[us](8|16|32|64)\b/) { |
117 | 154 | printf STDERR "$filename:$lineno: " . |