diff options
Diffstat (limited to 'archival/dpkg.c')
-rw-r--r-- | archival/dpkg.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/archival/dpkg.c b/archival/dpkg.c index df894472c..f921c43ee 100644 --- a/archival/dpkg.c +++ b/archival/dpkg.c | |||
@@ -1341,7 +1341,21 @@ static archive_handle_t *deb_extract(const char *filename, const char *ar_name, | |||
1341 | return(ar_archive->sub_archive); | 1341 | return(ar_archive->sub_archive); |
1342 | } | 1342 | } |
1343 | 1343 | ||
1344 | void unpack_package(deb_file_t *deb_file) | 1344 | static void data_extract_all_prefix(archive_handle_t *archive_handle) |
1345 | { | ||
1346 | char *name_ptr = archive_handle->file_header->name; | ||
1347 | |||
1348 | name_ptr += strspn(name_ptr, "./"); | ||
1349 | if (name_ptr[0] != '\0') { | ||
1350 | archive_handle->file_header->name = xmalloc(strlen(archive_handle->buffer) + 2 + strlen(name_ptr)); | ||
1351 | strcpy(archive_handle->file_header->name, archive_handle->buffer); | ||
1352 | strcat(archive_handle->file_header->name, name_ptr); | ||
1353 | data_extract_all(archive_handle); | ||
1354 | } | ||
1355 | return; | ||
1356 | } | ||
1357 | |||
1358 | static void unpack_package(deb_file_t *deb_file) | ||
1345 | { | 1359 | { |
1346 | const char *package_name = name_hashtable[package_hashtable[deb_file->package]->name]; | 1360 | const char *package_name = name_hashtable[package_hashtable[deb_file->package]->name]; |
1347 | const unsigned int status_num = search_status_hashtable(package_name); | 1361 | const unsigned int status_num = search_status_hashtable(package_name); |