diff options
Diffstat (limited to 'archival/dpkg.c')
-rw-r--r-- | archival/dpkg.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/archival/dpkg.c b/archival/dpkg.c index 451c6fa32..2e24541bf 100644 --- a/archival/dpkg.c +++ b/archival/dpkg.c | |||
@@ -1469,6 +1469,14 @@ static void init_archive_deb_data(archive_handle_t *ar_handle) | |||
1469 | ar_handle->sub_archive = tar_handle; | 1469 | ar_handle->sub_archive = tar_handle; |
1470 | } | 1470 | } |
1471 | 1471 | ||
1472 | static void FAST_FUNC data_extract_to_buffer(archive_handle_t *archive_handle) | ||
1473 | { | ||
1474 | unsigned size = archive_handle->file_header->size; | ||
1475 | |||
1476 | archive_handle->ah_buffer = xzalloc(size + 1); | ||
1477 | xread(archive_handle->src_fd, archive_handle->ah_buffer, size); | ||
1478 | } | ||
1479 | |||
1472 | static char *deb_extract_control_file_to_buffer(archive_handle_t *ar_handle, llist_t *myaccept) | 1480 | static char *deb_extract_control_file_to_buffer(archive_handle_t *ar_handle, llist_t *myaccept) |
1473 | { | 1481 | { |
1474 | ar_handle->sub_archive->action_data = data_extract_to_buffer; | 1482 | ar_handle->sub_archive->action_data = data_extract_to_buffer; |
@@ -1478,7 +1486,7 @@ static char *deb_extract_control_file_to_buffer(archive_handle_t *ar_handle, lli | |||
1478 | unpack_ar_archive(ar_handle); | 1486 | unpack_ar_archive(ar_handle); |
1479 | close(ar_handle->src_fd); | 1487 | close(ar_handle->src_fd); |
1480 | 1488 | ||
1481 | return ar_handle->sub_archive->buffer; | 1489 | return ar_handle->sub_archive->ah_buffer; |
1482 | } | 1490 | } |
1483 | 1491 | ||
1484 | static void FAST_FUNC data_extract_all_prefix(archive_handle_t *archive_handle) | 1492 | static void FAST_FUNC data_extract_all_prefix(archive_handle_t *archive_handle) |
@@ -1487,7 +1495,7 @@ static void FAST_FUNC data_extract_all_prefix(archive_handle_t *archive_handle) | |||
1487 | 1495 | ||
1488 | name_ptr += strspn(name_ptr, "./"); | 1496 | name_ptr += strspn(name_ptr, "./"); |
1489 | if (name_ptr[0] != '\0') { | 1497 | if (name_ptr[0] != '\0') { |
1490 | archive_handle->file_header->name = xasprintf("%s%s", archive_handle->buffer, name_ptr); | 1498 | archive_handle->file_header->name = xasprintf("%s%s", archive_handle->ah_buffer, name_ptr); |
1491 | data_extract_all(archive_handle); | 1499 | data_extract_all(archive_handle); |
1492 | } | 1500 | } |
1493 | } | 1501 | } |
@@ -1530,7 +1538,7 @@ static void unpack_package(deb_file_t *deb_file) | |||
1530 | archive_handle->sub_archive->accept = accept_list; | 1538 | archive_handle->sub_archive->accept = accept_list; |
1531 | archive_handle->sub_archive->filter = filter_accept_list; | 1539 | archive_handle->sub_archive->filter = filter_accept_list; |
1532 | archive_handle->sub_archive->action_data = data_extract_all_prefix; | 1540 | archive_handle->sub_archive->action_data = data_extract_all_prefix; |
1533 | archive_handle->sub_archive->buffer = info_prefix; | 1541 | archive_handle->sub_archive->ah_buffer = info_prefix; |
1534 | archive_handle->sub_archive->ah_flags |= ARCHIVE_UNLINK_OLD; | 1542 | archive_handle->sub_archive->ah_flags |= ARCHIVE_UNLINK_OLD; |
1535 | unpack_ar_archive(archive_handle); | 1543 | unpack_ar_archive(archive_handle); |
1536 | 1544 | ||
@@ -1541,7 +1549,7 @@ static void unpack_package(deb_file_t *deb_file) | |||
1541 | archive_handle = init_archive_deb_ar(deb_file->filename); | 1549 | archive_handle = init_archive_deb_ar(deb_file->filename); |
1542 | init_archive_deb_data(archive_handle); | 1550 | init_archive_deb_data(archive_handle); |
1543 | archive_handle->sub_archive->action_data = data_extract_all_prefix; | 1551 | archive_handle->sub_archive->action_data = data_extract_all_prefix; |
1544 | archive_handle->sub_archive->buffer = (char*)"/"; /* huh? */ | 1552 | archive_handle->sub_archive->ah_buffer = (char*)"/"; /* huh? */ |
1545 | archive_handle->sub_archive->ah_flags |= ARCHIVE_UNLINK_OLD; | 1553 | archive_handle->sub_archive->ah_flags |= ARCHIVE_UNLINK_OLD; |
1546 | unpack_ar_archive(archive_handle); | 1554 | unpack_ar_archive(archive_handle); |
1547 | 1555 | ||