From 5f44e053cc2f9c4775b8d004dbd49be03f292107 Mon Sep 17 00:00:00 2001 From: "David E. O'Brien" Date: Sat, 12 Mar 2005 06:38:01 +0000 Subject: [PATCH] Fix bin/pax doesn't wait for compress/gzip before exiting. Submitted by: Joerg Sonnenberger Obtained from: OpenBSD (commited fix to PR 3455) --- bin/pax/ar_io.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bin/pax/ar_io.c b/bin/pax/ar_io.c index 0ae50421ed08..3588374257b5 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;