[git commit master 1/1] tar: make typical extraction less memory-hungry

Denys Vlasenko vda.linux at googlemail.com
Sat Jun 26 16:22:41 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=b768aeb164d361d1ca2c8f6c091e93442f072656
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 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 01c1043..21bbc97 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)
 		/* (like GNU tar 1.15.1: verbose mode outputs "dir/dir/") */
 		if (cp)
 			*cp = '\0';
-		//archive_handle->ah_flags |= ARCHIVE_EXTRACT_QUIET; // why??
 		archive_handle->action_data(archive_handle);
-		llist_add_to(&(archive_handle->passed), file_header->name);
+		if (archive_handle->accept || archive_handle->reject)
+			llist_add_to(&archive_handle->passed, file_header->name);
+		else /* Caller isn't interested in list of unpacked files */
+			free(file_header->name);
 	} else {
 		data_skip(archive_handle);
 		free(file_header->name);
@@ -446,7 +448,8 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
 	archive_handle->offset += file_header->size;
 
 	free(file_header->link_target);
-	/* Do not free(file_header->name)! (why?) */
+	/* Do not free(file_header->name)!
+	 * It might be inserted in archive_handle->passed - see above */
 #if ENABLE_FEATURE_TAR_UNAME_GNAME
 	free(file_header->tar__uname);
 	free(file_header->tar__gname);
-- 
1.7.1



More information about the busybox-cvs mailing list