tar: make typical extraction less memory-hungry

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2010-06-26 18:22:41 +02:00
parent 52827e3ebc
commit b768aeb164

View 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/") */ /* (like GNU tar 1.15.1: verbose mode outputs "dir/dir/") */
if (cp) if (cp)
*cp = '\0'; *cp = '\0';
//archive_handle->ah_flags |= ARCHIVE_EXTRACT_QUIET; // why??
archive_handle->action_data(archive_handle); 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 { } else {
data_skip(archive_handle); data_skip(archive_handle);
free(file_header->name); 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; archive_handle->offset += file_header->size;
free(file_header->link_target); 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 #if ENABLE_FEATURE_TAR_UNAME_GNAME
free(file_header->tar__uname); free(file_header->tar__uname);
free(file_header->tar__gname); free(file_header->tar__gname);