aboutsummaryrefslogtreecommitdiff
path: root/libbb/gz_open.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbb/gz_open.c')
-rw-r--r--libbb/gz_open.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/libbb/gz_open.c b/libbb/gz_open.c
new file mode 100644
index 000000000..1be5a171d
--- /dev/null
+++ b/libbb/gz_open.c
@@ -0,0 +1,34 @@
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "libbb.h"
+
+extern int gz_open(FILE *compressed_file, int *pid)
+{
+ int unzip_pipe[2];
+
+ if (pipe(unzip_pipe)!=0) {
+ error_msg("pipe error");
+ return(EXIT_FAILURE);
+ }
+ if ((*pid = fork()) == -1) {
+ error_msg("fork failured");
+ return(EXIT_FAILURE);
+ }
+ if (*pid==0) {
+ /* child process */
+ close(unzip_pipe[0]);
+ unzip(compressed_file, fdopen(unzip_pipe[1], "w"));
+ printf("finished unzipping\n");
+ fflush(NULL);
+ fclose(compressed_file);
+ close(unzip_pipe[1]);
+ exit(EXIT_SUCCESS);
+ }
+
+ close(unzip_pipe[1]);
+ return(unzip_pipe[0]);
+} \ No newline at end of file