about summary refs log tree commit homepage
path: root/script
diff options
context:
space:
mode:
Diffstat (limited to 'script')
-rwxr-xr-xscript/lei11
1 files changed, 5 insertions, 6 deletions
diff --git a/script/lei b/script/lei
index 8c40bf12..006c1180 100755
--- a/script/lei
+++ b/script/lei
@@ -23,20 +23,19 @@ sub sigchld {
 
 sub exec_cmd {
         my ($fds, $argc, @argv) = @_;
-        my @m = (*STDIN{IO}, '<&=',  *STDOUT{IO}, '>&=', *STDERR{IO}, '>&=');
+        my @old = (*STDIN{IO}, *STDOUT{IO}, *STDERR{IO});
         my @rdr;
         for my $fd (@$fds) {
-                my ($old_io, $mode) = splice(@m, 0, 2);
-                open(my $tmpfh, $mode, $fd) or die "open $mode$fd: $!";
-                push @rdr, $old_io, $mode, $tmpfh;
+                open(my $tmpfh, '+<&=', $fd) or die "open +<&=$fd: $!";
+                push @rdr, shift(@old), $tmpfh;
         }
         require POSIX; # WNOHANG
         $SIG{CHLD} = \&sigchld;
         my $pid = fork // die "fork: $!";
         if ($pid == 0) {
                 my %env = map { split(/=/, $_, 2) } splice(@argv, $argc);
-                while (my ($old_io, $mode, $tmpfh) = splice(@rdr, 0, 3)) {
-                        open $old_io, $mode, $tmpfh or die "open $mode: $!";
+                while (my ($old_io, $tmpfh) = splice(@rdr, 0, 2)) {
+                        open $old_io, '+<&', $tmpfh or die "open +<&=: $!";
                 }
                 %ENV = (%ENV, %env);
                 exec(@argv);