aboutsummaryrefslogtreecommitdiff
path: root/scripts/maint/checkSpace.pl
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2019-03-12 15:19:28 -0400
committerNick Mathewson <nickm@torproject.org>2019-03-12 15:19:28 -0400
commit95209be861738d15fdb8d3f8da9a6164ed5f3903 (patch)
treeeac26786779230e659e8f898ebd208f7567ea7b3 /scripts/maint/checkSpace.pl
parentcd52e139469bad103cd6ad02cbdf3c58bfd77b26 (diff)
downloadtor-95209be861738d15fdb8d3f8da9a6164ed5f3903.tar.gz
tor-95209be861738d15fdb8d3f8da9a6164ed5f3903.zip
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.
Diffstat (limited to 'scripts/maint/checkSpace.pl')
-rwxr-xr-xscripts/maint/checkSpace.pl32
1 files changed, 32 insertions, 0 deletions
diff --git a/scripts/maint/checkSpace.pl b/scripts/maint/checkSpace.pl
index 633b47e314..433ae62807 100755
--- a/scripts/maint/checkSpace.pl
+++ b/scripts/maint/checkSpace.pl
@@ -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);
}