From 018e9e6799ec34d2793c7b16f52e39cd9206861b Mon Sep 17 00:00:00 2001 From: Glenn L McGrath Date: Wed, 28 Mar 2001 07:27:26 +0000 Subject: [PATCH] Fix tar -z, calls gz_open now --- archival/gunzip.c | 17 ++++++++--------- archival/tar.c | 20 ++++++++++++++++++-- gunzip.c | 17 ++++++++--------- tar.c | 20 ++++++++++++++++++-- 4 files changed, 52 insertions(+), 22 deletions(-) diff --git a/archival/gunzip.c b/archival/gunzip.c index e9f764882..9d81031d7 100644 --- a/archival/gunzip.c +++ b/archival/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/archival/tar.c b/archival/tar.c index 16b3fb4b6..46321de60 100644 --- a/archival/tar.c +++ b/archival/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 diff --git a/gunzip.c b/gunzip.c index e9f764882..9d81031d7 100644 --- 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 16b3fb4b6..46321de60 100644 --- 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