浏览代码

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>
Markus Armbruster 6 年之前
父节点
当前提交
c0a9956b32
共有 1 个文件被更改,包括 7 次插入5 次删除
  1. 7 5
      scripts/clean-header-guards.pl

+ 7 - 5
scripts/clean-header-guards.pl

@@ -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?)
-                       (\n|\s)*\Z,x) {
+                       ([ \t]*\#[ \t]*endif([ \t]*\N*)\n)
+                       ((?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;
             }
             }
         }
         }