diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-06-26 18:22:41 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-06-26 18:22:41 +0200 |
commit | b768aeb164d361d1ca2c8f6c091e93442f072656 (patch) | |
tree | 7cd91b9057fcfcea857ea8f96de1d1adac970bab | |
parent | 52827e3ebcd80f634f990030ee697254a0ae517d (diff) | |
download | busybox-w32-b768aeb164d361d1ca2c8f6c091e93442f072656.tar.gz busybox-w32-b768aeb164d361d1ca2c8f6c091e93442f072656.tar.bz2 busybox-w32-b768aeb164d361d1ca2c8f6c091e93442f072656.zip |
tar: make typical extraction less memory-hungry
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | archival/libunarchive/get_header_tar.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/archival/libunarchive/get_header_tar.c b/archival/libunarchive/get_header_tar.c index 01c10433e..21bbc9715 100644 --- a/archival/libunarchive/get_header_tar.c +++ b/archival/libunarchive/get_header_tar.c | |||
@@ -436,9 +436,11 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle) | |||
436 | /* (like GNU tar 1.15.1: verbose mode outputs "dir/dir/") */ | 436 | /* (like GNU tar 1.15.1: verbose mode outputs "dir/dir/") */ |
437 | if (cp) | 437 | if (cp) |
438 | *cp = '\0'; | 438 | *cp = '\0'; |
439 | //archive_handle->ah_flags |= ARCHIVE_EXTRACT_QUIET; // why?? | ||
440 | archive_handle->action_data(archive_handle); | 439 | archive_handle->action_data(archive_handle); |
441 | llist_add_to(&(archive_handle->passed), file_header->name); | 440 | if (archive_handle->accept || archive_handle->reject) |
441 | llist_add_to(&archive_handle->passed, file_header->name); | ||
442 | else /* Caller isn't interested in list of unpacked files */ | ||
443 | free(file_header->name); | ||
442 | } else { | 444 | } else { |
443 | data_skip(archive_handle); | 445 | data_skip(archive_handle); |
444 | free(file_header->name); | 446 | free(file_header->name); |
@@ -446,7 +448,8 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle) | |||
446 | archive_handle->offset += file_header->size; | 448 | archive_handle->offset += file_header->size; |
447 | 449 | ||
448 | free(file_header->link_target); | 450 | free(file_header->link_target); |
449 | /* Do not free(file_header->name)! (why?) */ | 451 | /* Do not free(file_header->name)! |
452 | * It might be inserted in archive_handle->passed - see above */ | ||
450 | #if ENABLE_FEATURE_TAR_UNAME_GNAME | 453 | #if ENABLE_FEATURE_TAR_UNAME_GNAME |
451 | free(file_header->tar__uname); | 454 | free(file_header->tar__uname); |
452 | free(file_header->tar__gname); | 455 | free(file_header->tar__gname); |