summaryrefslogtreecommitdiff
path: root/archival/libunarchive/get_header_tar_bz2.c
diff options
context:
space:
mode:
authorGlenn L McGrath2003-11-15 23:19:05 +0000
committerGlenn L McGrath2003-11-15 23:19:05 +0000
commit5699b8525e855a0e851725980964e8755e365f5b (patch)
treefe3d7ead1f80f5b56e44e52a651f368adf92c91d /archival/libunarchive/get_header_tar_bz2.c
parent54ac057c0016ac23b7367342f4834e33cf7d47d7 (diff)
downloadbusybox-5699b8525e855a0e851725980964e8755e365f5b.zip
busybox-5699b8525e855a0e851725980964e8755e365f5b.tar.gz
Move from read_gz to the pipe()+fork() method.
open_transformer(), common code for pipe+fork. Function pointer for read() no longer needed. Allow inflate to be initialised with a specified buffer size to avoid over-reading. Reset static variables in inflate_get_next_window to fix a bug where only the first file in a .zip would be be extracted.
Diffstat (limited to 'archival/libunarchive/get_header_tar_bz2.c')
-rw-r--r--archival/libunarchive/get_header_tar_bz2.c42
1 files changed, 1 insertions, 41 deletions
diff --git a/archival/libunarchive/get_header_tar_bz2.c b/archival/libunarchive/get_header_tar_bz2.c
index 6354648..d49d6b9 100644
--- a/archival/libunarchive/get_header_tar_bz2.c
+++ b/archival/libunarchive/get_header_tar_bz2.c
@@ -26,53 +26,13 @@
extern char get_header_tar_bz2(archive_handle_t *archive_handle)
{
- int fd_pipe[2];
- int pid;
-
/* Cant lseek over pipe's */
- archive_handle->read = safe_read;
archive_handle->seek = seek_by_char;
- if (pipe(fd_pipe) != 0) {
- bb_error_msg_and_die("Can't create pipe");
- }
-
- pid = fork();
- if (pid == -1) {
- bb_error_msg_and_die("Fork failed\n");
- }
-
- if (pid == 0) {
- /* child process */
- int status;
-
- close(fd_pipe[0]); /* We don't wan't to read from the pipe */
- uncompressStream(archive_handle->src_fd, fd_pipe[1]);
- close(fd_pipe[1]); /* Send EOF */
- exit(status);
- /* notreached */
- }
- /* parent process */
- close(fd_pipe[1]); /* Don't want to write down the pipe */
- close(archive_handle->src_fd);
-
- archive_handle->src_fd = fd_pipe[0];
-
+ archive_handle->src_fd = open_transformer(archive_handle->src_fd, uncompressStream);
archive_handle->offset = 0;
while (get_header_tar(archive_handle) == EXIT_SUCCESS);
- close(fd_pipe[0]);
-#if 0
- if (kill(pid, SIGTERM) == -1) {
- bb_error_msg_and_die("Couldnt kill gunzip process");
- }
-#endif
-
- /* I dont think this is needed */
- if (waitpid(pid, NULL, 0) == -1) {
- bb_error_msg("Couldnt wait ?");
- }
-
/* Can only do one file at a time */
return(EXIT_FAILURE);
}