diff options
author | Denis Vlasenko | 2008-02-16 13:18:17 +0000 |
---|---|---|
committer | Denis Vlasenko | 2008-02-16 13:18:17 +0000 |
commit | 284d0faed6a1ec2adcc4b7aea31ae3d05b3b70d9 (patch) | |
tree | 3cfcea06c5a5c9e454edd39b58111ef38810882c /archival/tar.c | |
parent | 069e347863fa46f684ab6bd7e48cefd8fa74b629 (diff) | |
download | busybox-284d0faed6a1ec2adcc4b7aea31ae3d05b3b70d9.zip busybox-284d0faed6a1ec2adcc4b7aea31ae3d05b3b70d9.tar.gz |
random s/short/int/
add_cmd 1189 1190 +1
xconnect_ftpdata 118 117 -1
data_align 86 84 -2
process_files 2101 2096 -5
forkexec 1345 1334 -11
Diffstat (limited to 'archival/tar.c')
-rw-r--r-- | archival/tar.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/archival/tar.c b/archival/tar.c index 6b37383..a8ff7b8 100644 --- a/archival/tar.c +++ b/archival/tar.c @@ -546,13 +546,16 @@ static int writeTarFile(const int tar_fd, const int verboseFlag, if (gzipPid == 0) { /* child */ - xmove_fd(tbInfo.tarFd, 1); - xmove_fd(gzipDataPipe.rd, 0); + /* NB: close _first_, then move fds! */ close(gzipDataPipe.wr); #if WAIT_FOR_CHILD close(gzipStatusPipe.rd); + /* gzipStatusPipe.wr will close only on exec - + * parent waits for this close to happen */ fcntl(gzipStatusPipe.wr, F_SETFD, FD_CLOEXEC); #endif + xmove_fd(gzipDataPipe.rd, 0); + xmove_fd(tbInfo.tarFd, 1); /* exec gzip/bzip2 program/applet */ BB_EXECLP(zip_exec, zip_exec, "-f", NULL); vfork_exec_errno = errno; @@ -570,7 +573,7 @@ static int writeTarFile(const int tar_fd, const int verboseFlag, /* Wait until child execs (or fails to) */ n = full_read(gzipStatusPipe.rd, &buf, 1); - if ((n < 0) && (/*errno == EAGAIN ||*/ errno == EINTR)) + if (n < 0 /* && errno == EAGAIN */) continue; /* try it again */ } |