aboutsummaryrefslogtreecommitdiff
path: root/archival/dpkg.c
diff options
context:
space:
mode:
Diffstat (limited to 'archival/dpkg.c')
-rw-r--r--archival/dpkg.c16
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
1472static 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
1472static char *deb_extract_control_file_to_buffer(archive_handle_t *ar_handle, llist_t *myaccept) 1480static 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
1484static void FAST_FUNC data_extract_all_prefix(archive_handle_t *archive_handle) 1492static 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