aboutsummaryrefslogtreecommitdiff
path: root/archival/libarchive
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2015-01-30 15:15:38 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2015-01-30 15:15:38 +0100
commit08f9ffc3f7503eb3dc94f16c615b20d2ae9a059c (patch)
tree7f4ad348cc275500a72a6c7ea3dab015bce2221b /archival/libarchive
parent8c05a74f7efcda6ae5bd83e134edf44af12cb5e4 (diff)
downloadbusybox-w32-08f9ffc3f7503eb3dc94f16c615b20d2ae9a059c.tar.gz
busybox-w32-08f9ffc3f7503eb3dc94f16c615b20d2ae9a059c.tar.bz2
busybox-w32-08f9ffc3f7503eb3dc94f16c615b20d2ae9a059c.zip
dpkg: update supported compression methods
Based on a patch by Ron Yorston <rmy@tigress.co.uk> function old new delta get_header_tar_xz - 60 +60 filter_accept_list_reassign 128 188 +60 unpack_package 585 621 +36 init_archive_deb_control 52 76 +24 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 3/0 up/down: 180/0) Total: 180 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'archival/libarchive')
-rw-r--r--archival/libarchive/Kbuild.src1
-rw-r--r--archival/libarchive/filter_accept_list_reassign.c10
-rw-r--r--archival/libarchive/get_header_tar_xz.c21
3 files changed, 32 insertions, 0 deletions
diff --git a/archival/libarchive/Kbuild.src b/archival/libarchive/Kbuild.src
index 968fdf8ab..7e89e9e89 100644
--- a/archival/libarchive/Kbuild.src
+++ b/archival/libarchive/Kbuild.src
@@ -35,6 +35,7 @@ DPKG_FILES:= \
35 get_header_tar_gz.o \ 35 get_header_tar_gz.o \
36 get_header_tar_bz2.o \ 36 get_header_tar_bz2.o \
37 get_header_tar_lzma.o \ 37 get_header_tar_lzma.o \
38 get_header_tar_xz.o \
38 39
39INSERT 40INSERT
40 41
diff --git a/archival/libarchive/filter_accept_list_reassign.c b/archival/libarchive/filter_accept_list_reassign.c
index 3d19abe44..b9acfbc05 100644
--- a/archival/libarchive/filter_accept_list_reassign.c
+++ b/archival/libarchive/filter_accept_list_reassign.c
@@ -28,6 +28,10 @@ char FAST_FUNC filter_accept_list_reassign(archive_handle_t *archive_handle)
28 name_ptr++; 28 name_ptr++;
29 29
30 /* Modify the subarchive handler based on the extension */ 30 /* Modify the subarchive handler based on the extension */
31 if (strcmp(name_ptr, "tar") == 0) {
32 archive_handle->dpkg__action_data_subarchive = get_header_tar;
33 return EXIT_SUCCESS;
34 }
31 if (ENABLE_FEATURE_SEAMLESS_GZ 35 if (ENABLE_FEATURE_SEAMLESS_GZ
32 && strcmp(name_ptr, "gz") == 0 36 && strcmp(name_ptr, "gz") == 0
33 ) { 37 ) {
@@ -46,6 +50,12 @@ char FAST_FUNC filter_accept_list_reassign(archive_handle_t *archive_handle)
46 archive_handle->dpkg__action_data_subarchive = get_header_tar_lzma; 50 archive_handle->dpkg__action_data_subarchive = get_header_tar_lzma;
47 return EXIT_SUCCESS; 51 return EXIT_SUCCESS;
48 } 52 }
53 if (ENABLE_FEATURE_SEAMLESS_XZ
54 && strcmp(name_ptr, "xz") == 0
55 ) {
56 archive_handle->dpkg__action_data_subarchive = get_header_tar_xz;
57 return EXIT_SUCCESS;
58 }
49 } 59 }
50 return EXIT_FAILURE; 60 return EXIT_FAILURE;
51} 61}
diff --git a/archival/libarchive/get_header_tar_xz.c b/archival/libarchive/get_header_tar_xz.c
new file mode 100644
index 000000000..7bf3b3b56
--- /dev/null
+++ b/archival/libarchive/get_header_tar_xz.c
@@ -0,0 +1,21 @@
1/* vi: set sw=4 ts=4: */
2/*
3 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
4 */
5
6#include "libbb.h"
7#include "bb_archive.h"
8
9char FAST_FUNC get_header_tar_xz(archive_handle_t *archive_handle)
10{
11 /* Can't lseek over pipes */
12 archive_handle->seek = seek_by_read;
13
14 fork_transformer_with_sig(archive_handle->src_fd, unpack_xz_stream, "unxz");
15 archive_handle->offset = 0;
16 while (get_header_tar(archive_handle) == EXIT_SUCCESS)
17 continue;
18
19 /* Can only do one file at a time */
20 return EXIT_FAILURE;
21}