aboutsummaryrefslogtreecommitdiff
path: root/archival/tar.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-02-16 13:18:17 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-02-16 13:18:17 +0000
commit284d0faed6a1ec2adcc4b7aea31ae3d05b3b70d9 (patch)
tree3cfcea06c5a5c9e454edd39b58111ef38810882c /archival/tar.c
parent069e347863fa46f684ab6bd7e48cefd8fa74b629 (diff)
downloadbusybox-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.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/archival/tar.c b/archival/tar.c
index 6b3738365..a8ff7b894 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 */
}