diff options
author | obrien <obrien@FreeBSD.org> | 2005-03-12 06:38:01 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 2005-03-12 06:38:01 +0000 |
commit | ed5564cbbf2505c1c574ae4581d56add200c2da2 (patch) | |
tree | 34d9aaf3fa211e1f387e35d8f7e48bae1d54ac4c /bin/pax/ar_io.c | |
parent | 6fe43669c45c0ca52efb689f6cb1cea4072248f4 (diff) | |
download | FreeBSD-src-ed5564cbbf2505c1c574ae4581d56add200c2da2.zip FreeBSD-src-ed5564cbbf2505c1c574ae4581d56add200c2da2.tar.gz |
Fix bin/pax doesn't wait for compress/gzip before exiting.
Submitted by: Joerg Sonnenberger <joerg@britannica.bec.de>
Obtained from: OpenBSD (commited fix to PR 3455)
Diffstat (limited to 'bin/pax/ar_io.c')
-rw-r--r-- | bin/pax/ar_io.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/bin/pax/ar_io.c b/bin/pax/ar_io.c index 0ae5042..3588374 100644 --- a/bin/pax/ar_io.c +++ b/bin/pax/ar_io.c @@ -301,6 +301,7 @@ ar_open(const char *name) void ar_close(void) { + int status; if (arfd < 0) { did_io = io_ok = flcnt = 0; @@ -336,14 +337,15 @@ ar_close(void) * for a quick extract/list, pax frequently exits before the child * process is done */ - if ((act == LIST || act == EXTRACT) && nflag && zpid > 0) { - int status; + if ((act == LIST || act == EXTRACT) && nflag && zpid > 0) kill(zpid, SIGINT); - waitpid(zpid, &status, 0); - } (void)close(arfd); + /* Do not exit before child to ensure data integrity */ + if (zpid > 0) + waitpid(zpid, &status, 0); + if (vflag && (artyp == ISTAPE)) { (void)fputs("done.\n", listf); vfpart = 0; |