diff options
Diffstat (limited to 'libbb')
| -rw-r--r-- | libbb/unarchive.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/libbb/unarchive.c b/libbb/unarchive.c index d10e60cbb..78260d2d6 100644 --- a/libbb/unarchive.c +++ b/libbb/unarchive.c | |||
| @@ -232,25 +232,24 @@ char *unarchive(FILE *src_stream, FILE *out_stream, file_header_t *(*get_headers | |||
| 232 | int i; | 232 | int i; |
| 233 | char *buffer = NULL; | 233 | char *buffer = NULL; |
| 234 | 234 | ||
| 235 | if (extract_names == NULL) { | ||
| 236 | return(NULL); | ||
| 237 | } | ||
| 238 | archive_offset = 0; | 235 | archive_offset = 0; |
| 239 | while ((file_entry = get_headers(src_stream)) != NULL) { | 236 | while ((file_entry = get_headers(src_stream)) != NULL) { |
| 240 | found = FALSE; | 237 | found = FALSE; |
| 241 | if (extract_names[0] != NULL) { | 238 | if (extract_names == NULL) { |
| 239 | found = TRUE; | ||
| 240 | } else { | ||
| 242 | for(i = 0; extract_names[i] != 0; i++) { | 241 | for(i = 0; extract_names[i] != 0; i++) { |
| 243 | if (strcmp(extract_names[i], file_entry->name) == 0) { | 242 | if (strcmp(extract_names[i], file_entry->name) == 0) { |
| 244 | found = TRUE; | 243 | found = TRUE; |
| 245 | } | 244 | } |
| 246 | } | 245 | } |
| 247 | if (!found) { | ||
| 248 | /* seek past the data entry */ | ||
| 249 | seek_sub_file(src_stream, file_entry->size); | ||
| 250 | continue; | ||
| 251 | } | ||
| 252 | } | 246 | } |
| 253 | buffer = extract_archive(src_stream, out_stream, file_entry, extract_function, prefix); | 247 | if (found) { |
| 248 | buffer = extract_archive(src_stream, out_stream, file_entry, extract_function, prefix); | ||
| 249 | } else { | ||
| 250 | /* seek past the data entry */ | ||
| 251 | seek_sub_file(src_stream, file_entry->size); | ||
| 252 | } | ||
| 254 | } | 253 | } |
| 255 | return(buffer); | 254 | return(buffer); |
| 256 | } | 255 | } |
| @@ -544,17 +543,14 @@ char *deb_extract(const char *package_filename, FILE *out_stream, | |||
| 544 | FILE *deb_stream; | 543 | FILE *deb_stream; |
| 545 | FILE *uncompressed_stream = NULL; | 544 | FILE *uncompressed_stream = NULL; |
| 546 | file_header_t *ar_header = NULL; | 545 | file_header_t *ar_header = NULL; |
| 546 | char **file_list = NULL; | ||
| 547 | char *output_buffer = NULL; | 547 | char *output_buffer = NULL; |
| 548 | char *ared_file = NULL; | 548 | char *ared_file = NULL; |
| 549 | char ar_magic[8]; | 549 | char ar_magic[8]; |
| 550 | char **file_list; | ||
| 551 | int gunzip_pid; | 550 | int gunzip_pid; |
| 552 | 551 | ||
| 553 | if (filename == NULL) { | 552 | if (filename != NULL) { |
| 554 | file_list = xmalloc(sizeof(char *)); | 553 | file_list = xmalloc(sizeof(char *) * 2); |
| 555 | file_list[0] = NULL; | ||
| 556 | } else { | ||
| 557 | file_list = xmalloc(sizeof(char *) * 3); | ||
| 558 | file_list[0] = xstrdup(filename); | 554 | file_list[0] = xstrdup(filename); |
| 559 | file_list[1] = NULL; | 555 | file_list[1] = NULL; |
| 560 | } | 556 | } |
