diff options
Diffstat (limited to 'perl-install/run_program.pm')
| -rw-r--r-- | perl-install/run_program.pm | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/perl-install/run_program.pm b/perl-install/run_program.pm index 5bfd0352a..6e92daf74 100644 --- a/perl-install/run_program.pm +++ b/perl-install/run_program.pm @@ -41,20 +41,20 @@ sub rooted { sub raw { my ($options, $name, @args) = @_; my $root = $options->{root} || ''; - my $str = ref($name) ? $name->[0] : $name; + my $real_name = ref($name) ? $name->[0] : $name; my ($stdout_raw, $stdout_mode, $stderr_raw, $stderr_mode); ($stdout_mode, $stdout_raw, @args) = @args if $args[0] =~ /^>>?$/; ($stderr_mode, $stderr_raw, @args) = @args if $args[0] =~ /^2>>?$/; - log::l("running: $str @args" . ($root ? " with root $root" : "")); + log::l("running: $real_name @args" . ($root ? " with root $root" : "")); return 1 if $root && $<; $root ? ($root .= '/') : ($root = ''); - if (!$root && !$::isStandalone) { + if (!$root && $::isInstall) { require install_any; - install_any::check_prog(ref($name) ? $name->[0] : $name); + install_any::check_prog($real_name) if $real_name !~ /\|/; } $ENV{HOME} || $::isInstall or $ENV{HOME} = '/root'; @@ -79,7 +79,7 @@ sub raw { alarm 0; }; if ($@) { - log::l("ERROR: killing runaway process (process=$str, pid=$pid, args=@args, error=$@)"); + log::l("ERROR: killing runaway process (process=$real_name, pid=$pid, args=@args, error=$@)"); kill 9, $pid; return; } @@ -103,34 +103,34 @@ sub raw { $ok; } } else { + sub die_exit { + log::l($_[0]); + c::_exit(128); + } if ($stderr && $stderr eq 'STDERR') { } elsif ($stderr) { $stderr_mode =~ s/2//; - open STDERR, "$stderr_mode $stderr" or die "run_program can't output in $stderr (mode `$stderr_mode')"; + open STDERR, "$stderr_mode $stderr" or die_exit("run_program can't output in $stderr (mode `$stderr_mode')"); } elsif ($::isInstall) { - open STDERR, ">> /tmp/ddebug.log" or open STDOUT, ">> /dev/tty7" or die "run_program can't log, give me access to /tmp/ddebug.log"; + open STDERR, ">> /tmp/ddebug.log" or open STDOUT, ">> /dev/tty7" or die_exit("run_program can't log, give me access to /tmp/ddebug.log"); } if ($stdout && $stdout eq 'STDOUT') { } elsif ($stdout) { - open STDOUT, "$stdout_mode $stdout" or die "run_program can't output in $stdout (mode `$stdout_mode')"; + open STDOUT, "$stdout_mode $stdout" or die_exit("run_program can't output in $stdout (mode `$stdout_mode')"); } elsif ($::isInstall) { - open STDOUT, ">> /tmp/ddebug.log" or open STDOUT, ">> /dev/tty7" or die "run_program can't log, give me access to /tmp/ddebug.log"; + open STDOUT, ">> /tmp/ddebug.log" or open STDOUT, ">> /dev/tty7" or die_exit("run_program can't log, give me access to /tmp/ddebug.log"); } $root and chroot $root; chdir "/"; - if (ref $name) { - unless (exec { $name->[0] } $name->[1], @args) { - log::l("exec of $name->[0] failed: $!"); - c::_exit(128); - } - } else { - unless (exec $name, @args) { - log::l("exec of $name failed: $!"); - c::_exit(128); - } - + my $ok = ref $name ? do { + exec { $name->[0] } $name->[1], @args; + } : do { + exec $name, @args; + }; + if (!$ok) { + die_exit("exec of $real_name failed: $!"); } } |
