Fix tar -z, calls gz_open now
authorGlenn L McGrath <bug1@ihug.co.nz>
Wed, 28 Mar 2001 07:27:26 +0000 (07:27 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Wed, 28 Mar 2001 07:27:26 +0000 (07:27 -0000)
archival/gunzip.c
archival/tar.c
gunzip.c
tar.c

index e9f7648822b8523a10b220e05b11fe513f5bc506..9d81031d704795698ea4f66ae20306cfa96f2064 100644 (file)
@@ -918,7 +918,7 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file)
        in_file = l_in_file;
        out_file = l_out_file;
 
-       if (signal(SIGINT, SIG_IGN) != SIG_IGN) {
+/*     if (signal(SIGINT, SIG_IGN) != SIG_IGN) {
                (void) signal(SIGINT, (sig_type) abort_gzip);
        }
 #ifdef SIGTERM
@@ -931,7 +931,7 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file)
                (void) signal(SIGHUP, (sig_type) abort_gzip);
        }
 #endif
-
+*/
        /* Allocate all global buffers (for DYN_ALLOC option) */
        window = xmalloc((size_t)(((2L*WSIZE)+1L)*sizeof(unsigned char)));
        outcnt = 0;
@@ -1018,33 +1018,32 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file)
        return 0;
 }
 
-extern FILE *gz_open(FILE *compressed_file, int *pid)
+extern int gz_open(FILE *compressed_file, int *pid)
 {
        int unzip_pipe[2];
 
-       signal(SIGCHLD, abort_gzip);
+//     signal(SIGCHLD, abort_gzip);
        if (pipe(unzip_pipe)!=0) {
                error_msg("pipe error");
-               return NULL;
+               return(EXIT_FAILURE);
        }
        if ((*pid = fork()) == -1) {
                error_msg("fork failured");
-               return NULL;
+               return(EXIT_FAILURE);
        }
        if (*pid==0) {
                /* child process */
                close(unzip_pipe[0]);
                unzip(compressed_file, fdopen(unzip_pipe[1], "w"));
-//             printf("finished unzipping\n");
+               printf("finished unzipping\n");
                fflush(NULL);
-//             printf("fluched\n");
                fclose(compressed_file);
                close(unzip_pipe[1]);
                exit(EXIT_SUCCESS);
        }
        
        close(unzip_pipe[1]);
-       return (fdopen(unzip_pipe[0], "r"));
+       return(unzip_pipe[0]);
 }
 
 extern void gz_close(int gunzip_pid)
index 16b3fb4b6cdd46617a7f11abdd3b84899d5879ee..46321de60e0a5a72dc9b14f28a05779fccf68ce0 100644 (file)
@@ -58,6 +58,8 @@
 
 #ifdef BB_FEATURE_TAR_GZIP
 extern int unzip(int in, int out);
+extern int gz_open(FILE *compressed_file, int *pid);
+extern void gz_close(int gunzip_pid);
 #endif
 
 /* Tar file constants  */
@@ -202,6 +204,7 @@ extern int tar_main(int argc, char **argv)
        char file[256];
 #endif
 #if defined BB_FEATURE_TAR_GZIP
+       FILE *comp_file = NULL;
        int unzipFlag    = FALSE;
 #endif
        int listFlag     = FALSE;
@@ -211,6 +214,7 @@ extern int tar_main(int argc, char **argv)
        int tostdoutFlag = FALSE;
        int status       = FALSE;
        int opt;
+       pid_t pid;
 
        if (argc <= 1)
                show_usage();
@@ -315,13 +319,25 @@ extern int tar_main(int argc, char **argv)
 
 #ifdef BB_FEATURE_TAR_GZIP     
                /* unzip tarFd in a seperate process */
-               if (unzipFlag == TRUE)
-                       tarFd = tar_unzip_init(tarFd);
+               if (unzipFlag == TRUE) {
+                       comp_file = fdopen(tarFd, "r");
+                       printf("1\n");
+                       if ((tarFd = gz_open(comp_file, &pid)) == EXIT_FAILURE) {
+                               error_msg_and_die("Couldnt unzip file");
+                       }
+                       printf("2\n");
+               }
 #endif                 
                status = readTarFile(tarFd, extractFlag, listFlag, tostdoutFlag,
                                        verboseFlag, extractList, excludeList);
+               close(tarFd);
        }
 
+#ifdef BB_FEATURE_TAR_GZIP     
+       gz_close(pid);
+       fclose(comp_file);
+#endif                 
+
        if (status == TRUE)
                return EXIT_SUCCESS;
        else
index e9f7648822b8523a10b220e05b11fe513f5bc506..9d81031d704795698ea4f66ae20306cfa96f2064 100644 (file)
--- a/gunzip.c
+++ b/gunzip.c
@@ -918,7 +918,7 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file)
        in_file = l_in_file;
        out_file = l_out_file;
 
-       if (signal(SIGINT, SIG_IGN) != SIG_IGN) {
+/*     if (signal(SIGINT, SIG_IGN) != SIG_IGN) {
                (void) signal(SIGINT, (sig_type) abort_gzip);
        }
 #ifdef SIGTERM
@@ -931,7 +931,7 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file)
                (void) signal(SIGHUP, (sig_type) abort_gzip);
        }
 #endif
-
+*/
        /* Allocate all global buffers (for DYN_ALLOC option) */
        window = xmalloc((size_t)(((2L*WSIZE)+1L)*sizeof(unsigned char)));
        outcnt = 0;
@@ -1018,33 +1018,32 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file)
        return 0;
 }
 
-extern FILE *gz_open(FILE *compressed_file, int *pid)
+extern int gz_open(FILE *compressed_file, int *pid)
 {
        int unzip_pipe[2];
 
-       signal(SIGCHLD, abort_gzip);
+//     signal(SIGCHLD, abort_gzip);
        if (pipe(unzip_pipe)!=0) {
                error_msg("pipe error");
-               return NULL;
+               return(EXIT_FAILURE);
        }
        if ((*pid = fork()) == -1) {
                error_msg("fork failured");
-               return NULL;
+               return(EXIT_FAILURE);
        }
        if (*pid==0) {
                /* child process */
                close(unzip_pipe[0]);
                unzip(compressed_file, fdopen(unzip_pipe[1], "w"));
-//             printf("finished unzipping\n");
+               printf("finished unzipping\n");
                fflush(NULL);
-//             printf("fluched\n");
                fclose(compressed_file);
                close(unzip_pipe[1]);
                exit(EXIT_SUCCESS);
        }
        
        close(unzip_pipe[1]);
-       return (fdopen(unzip_pipe[0], "r"));
+       return(unzip_pipe[0]);
 }
 
 extern void gz_close(int gunzip_pid)
diff --git a/tar.c b/tar.c
index 16b3fb4b6cdd46617a7f11abdd3b84899d5879ee..46321de60e0a5a72dc9b14f28a05779fccf68ce0 100644 (file)
--- a/tar.c
+++ b/tar.c
@@ -58,6 +58,8 @@
 
 #ifdef BB_FEATURE_TAR_GZIP
 extern int unzip(int in, int out);
+extern int gz_open(FILE *compressed_file, int *pid);
+extern void gz_close(int gunzip_pid);
 #endif
 
 /* Tar file constants  */
@@ -202,6 +204,7 @@ extern int tar_main(int argc, char **argv)
        char file[256];
 #endif
 #if defined BB_FEATURE_TAR_GZIP
+       FILE *comp_file = NULL;
        int unzipFlag    = FALSE;
 #endif
        int listFlag     = FALSE;
@@ -211,6 +214,7 @@ extern int tar_main(int argc, char **argv)
        int tostdoutFlag = FALSE;
        int status       = FALSE;
        int opt;
+       pid_t pid;
 
        if (argc <= 1)
                show_usage();
@@ -315,13 +319,25 @@ extern int tar_main(int argc, char **argv)
 
 #ifdef BB_FEATURE_TAR_GZIP     
                /* unzip tarFd in a seperate process */
-               if (unzipFlag == TRUE)
-                       tarFd = tar_unzip_init(tarFd);
+               if (unzipFlag == TRUE) {
+                       comp_file = fdopen(tarFd, "r");
+                       printf("1\n");
+                       if ((tarFd = gz_open(comp_file, &pid)) == EXIT_FAILURE) {
+                               error_msg_and_die("Couldnt unzip file");
+                       }
+                       printf("2\n");
+               }
 #endif                 
                status = readTarFile(tarFd, extractFlag, listFlag, tostdoutFlag,
                                        verboseFlag, extractList, excludeList);
+               close(tarFd);
        }
 
+#ifdef BB_FEATURE_TAR_GZIP     
+       gz_close(pid);
+       fclose(comp_file);
+#endif                 
+
        if (status == TRUE)
                return EXIT_SUCCESS;
        else