my $pid;
eval {
- my $reader = IO::File->new();
- my $writer = IO::File->new();
- my $error = IO::File->new();
-
my $input;
+ my $output;
my $outfunc;
my $errfunc;
};
} elsif ($p eq 'input') {
$input = $param{$p};
+ } elsif ($p eq 'output') {
+ $output = $param{$p};
} elsif ($p eq 'outfunc') {
$outfunc = $param{$p};
} elsif ($p eq 'errfunc') {
}
}
+ my $reader = $output && $output =~ m/^>&/ ? $output : IO::File->new();
+ my $writer = $input && $input =~ m/^<&/ ? $input : IO::File->new();
+ my $error = IO::File->new();
+
# try to avoid locale related issues/warnings
my $lang = $param{lang} || 'C';
} elsif (my $sig = ($? & 127)) {
die "got signal $sig\n";
} elsif (my $ec = ($? >> 8)) {
- if ($errmsg && $laststderr) {
- my $lerr = $laststderr;
- $laststderr = undef;
- die "$lerr\n";
+ if (!($ec == 24 && ($cmdstr =~ m|^(\S+/)?rsync\s|))) {
+ if ($errmsg && $laststderr) {
+ my $lerr = $laststderr;
+ $laststderr = undef;
+ die "$lerr\n";
+ }
+ die "exit code $ec\n";
}
- die "exit code $ec\n";
}
alarm(0);
die "command '$cmdstr' failed: $err";
}
}
+
+ return undef;
}
sub split_list {