#include #include #include #include #include #include #include "libbb.h" extern FILE *gz_open(FILE *compressed_file, int *pid) { int unzip_pipe[2]; if (pipe(unzip_pipe)!=0) { error_msg("pipe error"); return(NULL); } if ((*pid = fork()) == -1) { error_msg("fork failured"); return(NULL); } if (*pid==0) { /* child process */ close(unzip_pipe[0]); unzip(compressed_file, fdopen(unzip_pipe[1], "w")); fflush(NULL); fclose(compressed_file); close(unzip_pipe[1]); exit(EXIT_SUCCESS); } close(unzip_pipe[1]); if (unzip_pipe[0] == -1) { error_msg("Couldnt initialise gzip stream"); } return(fdopen(unzip_pipe[0], "r")); }