tar: make typical extraction less memory-hungry
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 26 Jun 2010 16:22:41 +0000 (18:22 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 26 Jun 2010 16:22:41 +0000 (18:22 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
archival/libunarchive/get_header_tar.c

index 01c1043..21bbc97 100644 (file)
@@ -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);