recent perl have signal names we don't have, protect against that.
authorespie <espie@openbsd.org>
Tue, 18 Apr 2017 15:12:00 +0000 (15:12 +0000)
committerespie <espie@openbsd.org>
Tue, 18 Apr 2017 15:12:00 +0000 (15:12 +0000)
also, allow child_error to take a parameter so that this can be used to decode
an arbitrary wait() result.

usr.sbin/pkg_add/OpenBSD/Error.pm

index 8aee71a..7bc5880 100644 (file)
@@ -1,5 +1,5 @@
 # ex:ts=8 sw=4:
-# $OpenBSD: Error.pm,v 1.31 2012/04/28 15:22:49 espie Exp $
+# $OpenBSD: Error.pm,v 1.32 2017/04/18 15:12:00 espie Exp $
 #
 # Copyright (c) 2004-2010 Marc Espie <espie@openbsd.org>
 #
@@ -83,7 +83,9 @@ sub fillup_names
 
        for my $sym (keys %POSIX::) {
                next unless $sym =~ /^SIG([A-Z].*)/;
-               $signal_name[eval "&POSIX::$sym()"] = $1;
+               my $i = eval "&POSIX::$sym()";
+               next unless defined $i;
+               $signal_name[$i] = $1;
        }
        # extra BSD signals
        $signal_name[5] = 'TRAP';
@@ -113,7 +115,7 @@ sub find_signal
 
 sub child_error
 {
-       my $error = $?;
+       my $error = shift // $?;
 
        my $extra = "";