diff options
Diffstat (limited to 'archival')
-rw-r--r-- | archival/libunarchive/data_align.c | 6 | ||||
-rw-r--r-- | archival/tar.c | 9 |
2 files changed, 8 insertions, 7 deletions
diff --git a/archival/libunarchive/data_align.c b/archival/libunarchive/data_align.c index 9803199e0..d98dc5764 100644 --- a/archival/libunarchive/data_align.c +++ b/archival/libunarchive/data_align.c @@ -3,14 +3,12 @@ * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ -//#include <sys/types.h> - #include "libbb.h" #include "unarchive.h" -void data_align(archive_handle_t *archive_handle, const unsigned short boundary) +void data_align(archive_handle_t *archive_handle, unsigned boundary) { - const unsigned short skip_amount = (boundary - (archive_handle->offset % boundary)) % boundary; + unsigned skip_amount = (boundary - (archive_handle->offset % boundary)) % boundary; archive_handle->seek(archive_handle, skip_amount); archive_handle->offset += skip_amount; 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 */ } |