Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

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>
  • Loading branch information...
commit f75a8df3bd6466e29a4e40b86b2cfc96fe06d328 1 parent 875de98
Bobby Powers authored March 05, 2012 michal42 committed March 26, 2012

Showing 1 changed file with 37 additions and 1 deletion. Show diff stats Hide diff stats

  1. 38  scripts/headers_check.pl
38  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 @@ sub check_asm_types
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) {
@@ -113,6 +147,9 @@ sub check_sizetypes
113 147
 		$linux_types = 1;
114 148
 		return;
115 149
 	}
  150
+	if (my $included = ($line =~ /^\s*#\s*include\s+[<"](\S+)[>"]/)[0]) {
  151
+		check_include_typesh($included);
  152
+	}
116 153
 	if ($line =~ m/__[us](8|16|32|64)\b/) {
117 154
 		printf STDERR "$filename:$lineno: " .
118 155
 		              "found __[us]{8,16,32,64} type " .
@@ -122,4 +159,3 @@ sub check_sizetypes
122 159
 		#$ret = 1;
123 160
 	}
124 161
 }
125  
-

0 notes on commit f75a8df

Please sign in to comment.
Something went wrong with that request. Please try again.