aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-06-26 18:22:41 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2010-06-26 18:22:41 +0200
commitb768aeb164d361d1ca2c8f6c091e93442f072656 (patch)
tree7cd91b9057fcfcea857ea8f96de1d1adac970bab
parent52827e3ebcd80f634f990030ee697254a0ae517d (diff)
downloadbusybox-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.c9
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);