summaryrefslogtreecommitdiffstats
path: root/perl-install/run_program.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/run_program.pm')
-rw-r--r--perl-install/run_program.pm40
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: $!");
}
}