Including my extern-squishing script, which just found an
[rsync/rsync.git] / support / extern-squish
diff --git a/support/extern-squish b/support/extern-squish
new file mode 100755 (executable)
index 0000000..eb8b32e
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# This script finds extraneous "extern" variables in the *.c files.
+# Run it from inside the main rsync directory.
+
+use strict;
+
+my @files = glob('*.c');
+
+foreach my $fn (@files) {
+    open(IN, '<', $fn) or die;
+    undef $/; $_ = <IN>; $/ = "\n";
+    close IN;
+    my @externs = /^extern .*?([^[\s(*;&.]+)(?:\[.*?\])?;/mg;
+    foreach my $find (@externs) {
+       my @matches = /(?<!\sstruct )\b(\Q$find\E)\b/g;
+       print $fn, ': ', $find, "\n" if @matches == 1;
+    }
+}