Preserve error string during rename checks at initialization
authorJacob Bachmeyer <jcb@gnu.org>
Wed, 23 Nov 2022 03:38:50 +0000 (21:38 -0600)
committerJacob Bachmeyer <jcb@gnu.org>
Wed, 23 Nov 2022 03:38:50 +0000 (21:38 -0600)
The test file is unlinked if a rename call fails; this could reset $! to
indicate success, so the initial value of $! is saved first.

gatekeeper.pl

index 81a6e1be29c3fe75d0821674fc74e41b132e5f64..3921baba1d4674e4a1263eccfd098f581894b9dd 100755 (executable)
@@ -685,8 +685,9 @@ BEGIN {
       or abort "FATAL: create test file in inbox: $!";
     close $test;
     unless (rename $infile, $scratchfile and -f $scratchfile) {
+      my $err = "$!";
       unlink $infile;
-      abort "FATAL: could not rename file from inbox to scratchpad: $!";
+      abort "FATAL: could not rename file from inbox to scratchpad: $err";
     }
     unlink $scratchfile;       # test complete
   }
@@ -699,12 +700,14 @@ BEGIN {
       or abort "FATAL: create test file in staging directory: $!";
     close $test;
     unless (rename $stagefile, $pubfile and -f $pubfile) {
+      my $err = "$!";
       unlink $stagefile;
-      abort "FATAL: could not rename file from staging to public: $!";
+      abort "FATAL: could not rename file from staging to public: $err";
     }
     unless (rename $pubfile, $arcfile and -f $arcfile) {
+      my $err = "$!";
       unlink $pubfile;
-      abort "FATAL: could not rename file from public to archive: $!";
+      abort "FATAL: could not rename file from public to archive: $err";
     }
     unlink $arcfile;           # test complete
   }