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.
This commit is contained in:
Glenn L McGrath
2003-11-15 23:19:05 +00:00
parent 54ac057c00
commit 5699b8525e
16 changed files with 156 additions and 284 deletions

View File

@@ -199,7 +199,8 @@ extern int unzip_main(int argc, char **argv)
archive_handle->action_data(archive_handle);
} else {
dst_fd = bb_xopen(archive_handle->file_header->name, O_WRONLY | O_CREAT);
inflate(archive_handle->src_fd, dst_fd);
inflate_init(zip_header.formated.cmpsize);
inflate_unzip(archive_handle->src_fd, dst_fd);
close(dst_fd);
chmod(archive_handle->file_header->name, archive_handle->file_header->mode);
@@ -227,10 +228,8 @@ extern int unzip_main(int argc, char **argv)
/* Data descriptor section */
if (zip_header.formated.flags & 4) {
/* skip over duplicate crc, compressed size and uncompressed size */
unsigned short i;
for (i = 0; i != 12; i++) {
archive_xread_char(archive_handle);
}
unsigned char data_description[12];
archive_xread_all(archive_handle, data_description, 12);
archive_handle->offset += 12;
}
}