with-authinfo-kludge: Use `native' exit status and related interfaces.
authorMark Wooding <mdw@distorted.org.uk>
Thu, 21 Sep 2017 07:51:50 +0000 (08:51 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Thu, 21 Sep 2017 07:54:06 +0000 (08:54 +0100)
We're going to need to do things with process exit statuses that Perl
doesn't expose through its cooked exit status.

with-authinfo-kludge

index 4317d8d..d2d62fe 100755 (executable)
@@ -762,17 +762,18 @@ set_sighandler "CHLD", sub {
     defined (my $kid = waitpid -1, WNOHANG)
       or sysfail "failed to reap child: $!";
     last KID if $kid <= 0;
+    my $st = ${^CHILD_ERROR_NATIVE};
     my ($how, $rc);
-    if ($? == 0) {
+    if (WIFEXITED($st) && WEXITSTATUS($st) == 0) {
       $how = "exited successfully";
       $rc = 0;
-    } elsif ($? & 0xff) {
-      my $sig = $? & 0x7f;
+    } elsif (WIFSIGNALED($st)) {
+      my $sig = WTERMSIG($st);
       $how = "killed by signal $sig";
       $how .= " (core dumped)" if $? & 0x80;
       $rc = $sig | 0x80;
     } else {
-      $rc = $? >> 8;
+      $rc = WEXITSTATUS($st);
       $how = "exited with status $rc";
     }
     if ($kid == $CLIENTKID) {