scripts/clean-header-guards: Fix handling of trailing comments

clean-header-guards.pl fails to recognize a header guard #endif when
it's followed by a // comment, or multiple comments.  Fix that.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20190604181618.19980-3-armbru@redhat.com>
This commit is contained in:
Markus Armbruster 2019-06-04 20:16:16 +02:00
parent 0553d895f9
commit c0a9956b32
1 changed files with 7 additions and 5 deletions

View File

@ -103,7 +103,7 @@ sub preprocess {
for my $fname (@ARGV) { for my $fname (@ARGV) {
my $text = slurp($fname); my $text = slurp($fname);
$text =~ m,\A(\s*\n|\s*//\N*\n|\s*/\*.*?\*/\s*\n)*|,msg; $text =~ m,\A(\s*\n|\s*//\N*\n|\s*/\*.*?\*/\s*\n)*|,sg;
my $pre = $&; my $pre = $&;
unless ($text =~ /\G(.*\n)/g) { unless ($text =~ /\G(.*\n)/g) {
$text =~ /\G.*/; $text =~ /\G.*/;
@ -137,14 +137,16 @@ for my $fname (@ARGV) {
} }
unless ($body =~ m,\A((.*\n)*) unless ($body =~ m,\A((.*\n)*)
(\s*\#\s*endif\s*(/\*\s*.*\s*\*/\s*)?\n?) ([ \t]*\#[ \t]*endif([ \t]*\N*)\n)
(\n|\s)*\Z,x) { ((?s)(\s*\n|\s*//\N*\n|\s*/\*.*?\*/\s*\n)*)
\Z,x) {
skipping($fname, "can't find end of header guard"); skipping($fname, "can't find end of header guard");
next; next;
} }
$body = $1; $body = $1;
my $line3 = $3; my $line3 = $3;
my $endif_comment = $4; my $endif_comment = $4;
my $post = $5;
my $oldg = $guard; my $oldg = $guard;
@ -186,14 +188,14 @@ for my $fname (@ARGV) {
my $newl1 = "#ifndef $guard\n"; my $newl1 = "#ifndef $guard\n";
my $newl2 = "#define $guard\n"; my $newl2 = "#define $guard\n";
my $newl3 = "#endif\n"; my $newl3 = "#endif\n";
$newl3 =~ s,\Z, /* $guard */, if defined $endif_comment; $newl3 =~ s,\Z, /* $guard */, if $endif_comment;
if ($line1 ne $newl1 or $line2 ne $newl2 or $line3 ne $newl3) { if ($line1 ne $newl1 or $line2 ne $newl2 or $line3 ne $newl3) {
$pre =~ s/\n*\Z/\n\n/ if $pre =~ /\N/; $pre =~ s/\n*\Z/\n\n/ if $pre =~ /\N/;
$body =~ s/\A\n*/\n/; $body =~ s/\A\n*/\n/;
if ($opt_n) { if ($opt_n) {
print "$fname would be cleaned up\n" if $opt_v; print "$fname would be cleaned up\n" if $opt_v;
} else { } else {
unslurp($fname, "$pre$newl1$newl2$body$newl3"); unslurp($fname, "$pre$newl1$newl2$body$newl3$post");
print "$fname cleaned up\n" if $opt_v; print "$fname cleaned up\n" if $opt_v;
} }
} }