mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 13:13:44 +01:00
Make checkSpace.pl check guard macros:
- every .h file needs an #ifndef/#define pair. - They must refer to the same macro. - The guard macros that they refer to must be unique across all headers.
This commit is contained in:
parent
cd52e13946
commit
95209be861
3
changes/ticket29756
Normal file
3
changes/ticket29756
Normal file
@ -0,0 +1,3 @@
|
||||
o Minor features (developer tools):
|
||||
- Add a script to check that each header has a well-formed and unique
|
||||
guard marco. Closes ticket 29756.
|
@ -18,6 +18,8 @@ if ($ARGV[0] =~ /^-/) {
|
||||
|
||||
our %basenames = ();
|
||||
|
||||
our %guardnames = ();
|
||||
|
||||
for my $fn (@ARGV) {
|
||||
open(F, "$fn");
|
||||
my $lastnil = 0;
|
||||
@ -31,6 +33,10 @@ for my $fn (@ARGV) {
|
||||
} else {
|
||||
$basenames{$basename} = $fn;
|
||||
}
|
||||
my $isheader = ($fn =~ /\.h/);
|
||||
my $seenguard = 0;
|
||||
my $guardname = "<none>";
|
||||
|
||||
while (<F>) {
|
||||
## Warn about windows-style newlines.
|
||||
# (We insist on lines that end with a single LF character, not
|
||||
@ -112,6 +118,23 @@ for my $fn (@ARGV) {
|
||||
next;
|
||||
}
|
||||
}
|
||||
|
||||
if ($isheader) {
|
||||
if ($seenguard == 0) {
|
||||
if (/ifndef\s+(\S+)/) {
|
||||
++$seenguard;
|
||||
$guardname = $1;
|
||||
}
|
||||
} elsif ($seenguard == 1) {
|
||||
if (/^\#define (\S+)/) {
|
||||
++$seenguard;
|
||||
if ($1 ne $guardname) {
|
||||
msg "GUARD:$fn:$.: Header guard macro mismatch.\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (m!/\*.*?\*/!) {
|
||||
s!\s*/\*.*?\*/!!;
|
||||
} elsif (m!/\*!) {
|
||||
@ -201,6 +224,15 @@ for my $fn (@ARGV) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($isheader && $C) {
|
||||
if ($seenguard < 2) {
|
||||
msg "$fn:No #ifndef/#define header guard pair found.\n";
|
||||
} elsif ($guardnames{$guardname}) {
|
||||
msg "$fn:Guard macro $guardname also used in $guardnames{$guardname}\n";
|
||||
} else {
|
||||
$guardnames{$guardname} = $fn;
|
||||
}
|
||||
}
|
||||
close(F);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user