Applied after adding missing get_header_tar_xz.c I decided to not drop support for bzipped control file.
On Mon, Dec 8, 2014 at 8:57 AM, Ron Yorston <[email protected]> wrote: > According to the deb(5) man page the tar files contained in a deb > file can be compressed as follows: > > control.tar: uncompressed, gz, xz > data.tar: uncompressed, gz, bz2, lzma, xz > > Signed-off-by: Ron Yorston <[email protected]> > --- > archival/dpkg.c | 12 ++++++++++-- > archival/dpkg_deb.c | 8 ++++++-- > archival/libarchive/Kbuild.src | 1 + > archival/libarchive/filter_accept_list_reassign.c | 10 ++++++++++ > include/bb_archive.h | 1 + > 5 files changed, 28 insertions(+), 4 deletions(-) > > diff --git a/archival/dpkg.c b/archival/dpkg.c > index 2893cfc..104f47d 100644 > --- a/archival/dpkg.c > +++ b/archival/dpkg.c > @@ -1472,11 +1472,12 @@ static void init_archive_deb_control(archive_handle_t > *ar_handle) > tar_handle->src_fd = ar_handle->src_fd; > > /* We don't care about data.tar.* or debian-binary, just > control.tar.* */ > + llist_add_to(&(ar_handle->accept), (char*)"control.tar"); > #if ENABLE_FEATURE_SEAMLESS_GZ > llist_add_to(&(ar_handle->accept), (char*)"control.tar.gz"); > #endif > -#if ENABLE_FEATURE_SEAMLESS_BZ2 > - llist_add_to(&(ar_handle->accept), (char*)"control.tar.bz2"); > +#if ENABLE_FEATURE_SEAMLESS_XZ > + llist_add_to(&(ar_handle->accept), (char*)"control.tar.xz"); > #endif > > /* Assign the tar handle as a subarchive of the ar handle */ > @@ -1492,12 +1493,19 @@ static void init_archive_deb_data(archive_handle_t > *ar_handle) > tar_handle->src_fd = ar_handle->src_fd; > > /* We don't care about control.tar.* or debian-binary, just > data.tar.* */ > + llist_add_to(&(ar_handle->accept), (char*)"data.tar"); > #if ENABLE_FEATURE_SEAMLESS_GZ > llist_add_to(&(ar_handle->accept), (char*)"data.tar.gz"); > #endif > #if ENABLE_FEATURE_SEAMLESS_BZ2 > llist_add_to(&(ar_handle->accept), (char*)"data.tar.bz2"); > #endif > +#if ENABLE_FEATURE_SEAMLESS_LZMA > + llist_add_to(&(ar_handle->accept), (char*)"data.tar.lzma"); > +#endif > +#if ENABLE_FEATURE_SEAMLESS_XZ > + llist_add_to(&(ar_handle->accept), (char*)"data.tar.xz"); > +#endif > > /* Assign the tar handle as a subarchive of the ar handle */ > ar_handle->dpkg__sub_archive = tar_handle; > diff --git a/archival/dpkg_deb.c b/archival/dpkg_deb.c > index 13f9db9..b1e46a8 100644 > --- a/archival/dpkg_deb.c > +++ b/archival/dpkg_deb.c > @@ -70,17 +70,21 @@ int dpkg_deb_main(int argc, char **argv) > ar_archive->dpkg__sub_archive = tar_archive; > ar_archive->filter = filter_accept_list_reassign; > > + llist_add_to(&ar_archive->accept, (char*)"data.tar"); > + llist_add_to(&control_tar_llist, (char*)"control.tar"); > #if ENABLE_FEATURE_SEAMLESS_GZ > llist_add_to(&ar_archive->accept, (char*)"data.tar.gz"); > llist_add_to(&control_tar_llist, (char*)"control.tar.gz"); > #endif > #if ENABLE_FEATURE_SEAMLESS_BZ2 > llist_add_to(&ar_archive->accept, (char*)"data.tar.bz2"); > - llist_add_to(&control_tar_llist, (char*)"control.tar.bz2"); > #endif > #if ENABLE_FEATURE_SEAMLESS_LZMA > llist_add_to(&ar_archive->accept, (char*)"data.tar.lzma"); > - llist_add_to(&control_tar_llist, (char*)"control.tar.lzma"); > +#endif > +#if ENABLE_FEATURE_SEAMLESS_XZ > + llist_add_to(&ar_archive->accept, (char*)"data.tar.xz"); > + llist_add_to(&control_tar_llist, (char*)"control.tar.xz"); > #endif > > opt_complementary = "c--efXx:e--cfXx:f--ceXx:X--cefx:x--cefX"; > diff --git a/archival/libarchive/Kbuild.src b/archival/libarchive/Kbuild.src > index 968fdf8..7e89e9e 100644 > --- a/archival/libarchive/Kbuild.src > +++ b/archival/libarchive/Kbuild.src > @@ -35,6 +35,7 @@ DPKG_FILES:= \ > get_header_tar_gz.o \ > get_header_tar_bz2.o \ > get_header_tar_lzma.o \ > + get_header_tar_xz.o \ > > INSERT > > diff --git a/archival/libarchive/filter_accept_list_reassign.c > b/archival/libarchive/filter_accept_list_reassign.c > index 3d19abe..b9acfbc 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) > name_ptr++; > > /* Modify the subarchive handler based on the extension */ > + if (strcmp(name_ptr, "tar") == 0) { > + archive_handle->dpkg__action_data_subarchive = > get_header_tar; > + return EXIT_SUCCESS; > + } > if (ENABLE_FEATURE_SEAMLESS_GZ > && strcmp(name_ptr, "gz") == 0 > ) { > @@ -46,6 +50,12 @@ char FAST_FUNC > filter_accept_list_reassign(archive_handle_t *archive_handle) > archive_handle->dpkg__action_data_subarchive = > get_header_tar_lzma; > return EXIT_SUCCESS; > } > + if (ENABLE_FEATURE_SEAMLESS_XZ > + && strcmp(name_ptr, "xz") == 0 > + ) { > + archive_handle->dpkg__action_data_subarchive = > get_header_tar_xz; > + return EXIT_SUCCESS; > + } > } > return EXIT_FAILURE; > } > diff --git a/include/bb_archive.h b/include/bb_archive.h > index b82cfd8..242a7d0 100644 > --- a/include/bb_archive.h > +++ b/include/bb_archive.h > @@ -184,6 +184,7 @@ char get_header_tar(archive_handle_t *archive_handle) > FAST_FUNC; > char get_header_tar_gz(archive_handle_t *archive_handle) FAST_FUNC; > char get_header_tar_bz2(archive_handle_t *archive_handle) FAST_FUNC; > char get_header_tar_lzma(archive_handle_t *archive_handle) FAST_FUNC; > +char get_header_tar_xz(archive_handle_t *archive_handle) FAST_FUNC; > > void seek_by_jump(int fd, off_t amount) FAST_FUNC; > void seek_by_read(int fd, off_t amount) FAST_FUNC; > -- > 1.9.3 > > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
