Magellan Linux

Annotation of /trunk/busybox/patches/busybox-1.19.2-tar-seamless-xz.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1523 - (hide annotations) (download)
Thu Sep 8 21:40:13 2011 UTC (12 years, 9 months ago) by niro
File size: 7102 byte(s)
support tar -J and decide between lzma or xz compression
1 niro 1523 diff -Naur busybox-1.19.2/archival/libarchive/filter_accept_list_reassign.c busybox-1.19.2-magellan/archival/libarchive/filter_accept_list_reassign.c
2     --- busybox-1.19.2/archival/libarchive/filter_accept_list_reassign.c 2011-08-22 04:57:49.000000000 +0200
3     +++ busybox-1.19.2-magellan/archival/libarchive/filter_accept_list_reassign.c 2011-09-08 23:35:42.000000000 +0200
4     @@ -46,6 +46,12 @@
5     archive_handle->dpkg__action_data_subarchive = get_header_tar_lzma;
6     return EXIT_SUCCESS;
7     }
8     + if (ENABLE_FEATURE_SEAMLESS_XZ
9     + && strcmp(name_ptr, "xz") == 0
10     + ) {
11     + archive_handle->dpkg__action_data_subarchive = get_header_tar_xz;
12     + return EXIT_SUCCESS;
13     + }
14     }
15     return EXIT_FAILURE;
16     }
17     diff -Naur busybox-1.19.2/archival/libarchive/get_header_tar_xz.c busybox-1.19.2-magellan/archival/libarchive/get_header_tar_xz.c
18     --- busybox-1.19.2/archival/libarchive/get_header_tar_xz.c 1970-01-01 01:00:00.000000000 +0100
19     +++ busybox-1.19.2-magellan/archival/libarchive/get_header_tar_xz.c 2011-09-09 01:10:32.000000000 +0200
20     @@ -0,0 +1,39 @@
21     +/* vi: set sw=4 ts=4: */
22     +/*
23     + * Small xz deflate implementation.
24     + * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org>
25     + * Copyright (C) 2011 Niels Rogalla <niro@magellan-linux.de>
26     + *
27     + * Licensed under GPLv2, see file LICENSE in this source tree.
28     + */
29     +
30     +#include "libbb.h"
31     +#include "archive.h"
32     +
33     +char FAST_FUNC get_header_tar_xz(archive_handle_t *archive_handle)
34     +{
35     + uint16_t magic;
36     +
37     + /* check magic for LZMA or XZ */
38     + xread(archive_handle->src_fd, &magic, 2);
39     + xlseek(archive_handle->src_fd, -2, SEEK_CUR);
40     +
41     + /* Can't lseek over pipes */
42     + archive_handle->seek = seek_by_read;
43     +
44     + if (magic == LZMA_DEFAULT_MAGIC) {
45     + open_transformer(archive_handle->src_fd, unpack_lzma_stream, "unlzma");
46     + archive_handle->offset = 0;
47     + while (get_header_tar(archive_handle) == EXIT_SUCCESS)
48     + continue;
49     + } else {
50     + xlseek(archive_handle->src_fd, +6, SEEK_CUR);
51     + open_transformer(archive_handle->src_fd, unpack_xz_stream, "unxz");
52     + archive_handle->offset = 0;
53     + while (get_header_tar(archive_handle) == EXIT_SUCCESS)
54     + continue;
55     + }
56     +
57     + /* Can only do one file at a time */
58     + return EXIT_FAILURE;
59     +}
60     diff -Naur busybox-1.19.2/archival/libarchive/Kbuild.src busybox-1.19.2-magellan/archival/libarchive/Kbuild.src
61     --- busybox-1.19.2/archival/libarchive/Kbuild.src 2011-08-22 04:57:49.000000000 +0200
62     +++ busybox-1.19.2-magellan/archival/libarchive/Kbuild.src 2011-09-08 23:43:39.000000000 +0200
63     @@ -54,7 +54,7 @@
64     lib-$(CONFIG_FEATURE_SEAMLESS_GZ) += open_transformer.o decompress_unzip.o get_header_tar_gz.o
65     lib-$(CONFIG_FEATURE_SEAMLESS_BZ2) += open_transformer.o decompress_bunzip2.o get_header_tar_bz2.o
66     lib-$(CONFIG_FEATURE_SEAMLESS_LZMA) += open_transformer.o decompress_unlzma.o get_header_tar_lzma.o
67     -lib-$(CONFIG_FEATURE_SEAMLESS_XZ) += open_transformer.o decompress_unxz.o
68     +lib-$(CONFIG_FEATURE_SEAMLESS_XZ) += open_transformer.o decompress_unxz.o get_header_tar_xz.o
69     lib-$(CONFIG_FEATURE_COMPRESS_USAGE) += decompress_bunzip2.o
70     lib-$(CONFIG_FEATURE_COMPRESS_BBCONFIG) += decompress_bunzip2.o
71     lib-$(CONFIG_FEATURE_TAR_TO_COMMAND) += data_extract_to_command.o
72     diff -Naur busybox-1.19.2/archival/tar.c busybox-1.19.2-magellan/archival/tar.c
73     --- busybox-1.19.2/archival/tar.c 2011-08-22 04:57:49.000000000 +0200
74     +++ busybox-1.19.2-magellan/archival/tar.c 2011-09-08 23:33:04.000000000 +0200
75     @@ -744,6 +744,7 @@
76     //usage: IF_FEATURE_SEAMLESS_GZ("z")
77     //usage: IF_FEATURE_SEAMLESS_BZ2("j")
78     //usage: IF_FEATURE_SEAMLESS_LZMA("a")
79     +//usage: IF_FEATURE_SEAMLESS_XZ("J")
80     //usage: IF_FEATURE_TAR_CREATE("h")
81     //usage: IF_FEATURE_TAR_NOPRESERVE_TIME("m")
82     //usage: "vO] "
83     @@ -774,6 +775,9 @@
84     //usage: IF_FEATURE_SEAMLESS_LZMA(
85     //usage: "\n a (De)compress using lzma"
86     //usage: )
87     +//usage: IF_FEATURE_SEAMLESS_XZ(
88     +//usage: "\n J (De)compress using xz"
89     +//usage: )
90     //usage: "\n O Extract to stdout"
91     //usage: IF_FEATURE_TAR_CREATE(
92     //usage: "\n h Follow symlinks"
93     @@ -810,6 +814,7 @@
94     IF_FEATURE_TAR_CREATE( OPTBIT_DEREFERENCE ,)
95     IF_FEATURE_SEAMLESS_BZ2( OPTBIT_BZIP2 ,)
96     IF_FEATURE_SEAMLESS_LZMA(OPTBIT_LZMA ,)
97     + IF_FEATURE_SEAMLESS_XZ(OPTBIT_XZ ,)
98     IF_FEATURE_TAR_FROM( OPTBIT_INCLUDE_FROM,)
99     IF_FEATURE_TAR_FROM( OPTBIT_EXCLUDE_FROM,)
100     IF_FEATURE_SEAMLESS_GZ( OPTBIT_GZIP ,)
101     @@ -834,6 +839,7 @@
102     OPT_DEREFERENCE = IF_FEATURE_TAR_CREATE( (1 << OPTBIT_DEREFERENCE )) + 0, // h
103     OPT_BZIP2 = IF_FEATURE_SEAMLESS_BZ2( (1 << OPTBIT_BZIP2 )) + 0, // j
104     OPT_LZMA = IF_FEATURE_SEAMLESS_LZMA((1 << OPTBIT_LZMA )) + 0, // a
105     + OPT_XZ = IF_FEATURE_SEAMLESS_XZ((1 << OPTBIT_XZ )) + 0, // J
106     OPT_INCLUDE_FROM = IF_FEATURE_TAR_FROM( (1 << OPTBIT_INCLUDE_FROM)) + 0, // T
107     OPT_EXCLUDE_FROM = IF_FEATURE_TAR_FROM( (1 << OPTBIT_EXCLUDE_FROM)) + 0, // X
108     OPT_GZIP = IF_FEATURE_SEAMLESS_GZ( (1 << OPTBIT_GZIP )) + 0, // z
109     @@ -868,6 +874,9 @@
110     # if ENABLE_FEATURE_SEAMLESS_LZMA
111     "lzma\0" No_argument "a"
112     # endif
113     +# if ENABLE_FEATURE_SEAMLESS_XZ
114     + "xz\0" No_argument "J"
115     +# endif
116     # if ENABLE_FEATURE_TAR_FROM
117     "files-from\0" Required_argument "T"
118     "exclude-from\0" Required_argument "X"
119     @@ -966,6 +975,7 @@
120     IF_FEATURE_TAR_CREATE( "ch" )
121     IF_FEATURE_SEAMLESS_BZ2( "j" )
122     IF_FEATURE_SEAMLESS_LZMA("a" )
123     + IF_FEATURE_SEAMLESS_XZ("J" )
124     IF_FEATURE_TAR_FROM( "T:X:")
125     IF_FEATURE_SEAMLESS_GZ( "z" )
126     IF_FEATURE_SEAMLESS_Z( "Z" )
127     @@ -1026,6 +1036,9 @@
128     if (opt & OPT_LZMA)
129     get_header_ptr = get_header_tar_lzma;
130    
131     + if (opt & OPT_XZ)
132     + get_header_ptr = get_header_tar_xz;
133     +
134     if (opt & OPT_COMPRESS)
135     get_header_ptr = get_header_tar_Z;
136    
137     diff -Naur busybox-1.19.2/include/archive.h busybox-1.19.2-magellan/include/archive.h
138     --- busybox-1.19.2/include/archive.h 2011-08-22 04:57:49.000000000 +0200
139     +++ busybox-1.19.2-magellan/include/archive.h 2011-09-09 00:14:28.000000000 +0200
140     @@ -9,6 +9,8 @@
141     COMPRESS_MAGIC = 0x1f9d,
142     GZIP_MAGIC = 0x1f8b,
143     BZIP2_MAGIC = 256 * 'B' + 'Z',
144     + /* lzma default options: lc=3 lp=0 pb=2, historic % 256 == 0 */
145     + LZMA_DEFAULT_MAGIC = 0x5d00,
146     /* .xz signature: 0xfd, '7', 'z', 'X', 'Z', 0x00 */
147     /* More info at: http://tukaani.org/xz/xz-file-format.txt */
148     XZ_MAGIC1 = 256 * 0xfd + '7',
149     @@ -20,6 +22,8 @@
150     COMPRESS_MAGIC = 0x9d1f,
151     GZIP_MAGIC = 0x8b1f,
152     BZIP2_MAGIC = 'B' + 'Z' * 256,
153     + /* lzma default options: lc=3 lp=0 pb=2, historic % 256 == 0 */
154     + LZMA_DEFAULT_MAGIC = 0x5d,
155     XZ_MAGIC1 = 0xfd + '7' * 256,
156     XZ_MAGIC2 = 'z' + ('X' + ('Z' + 0 * 256) * 256) * 256,
157     XZ_MAGIC1a = 0xfd + ('7' + ('z' + 'X' * 256) * 256) * 256,
158     @@ -184,6 +188,7 @@
159     char get_header_tar_gz(archive_handle_t *archive_handle) FAST_FUNC;
160     char get_header_tar_bz2(archive_handle_t *archive_handle) FAST_FUNC;
161     char get_header_tar_lzma(archive_handle_t *archive_handle) FAST_FUNC;
162     +char get_header_tar_xz(archive_handle_t *archive_handle) FAST_FUNC;
163    
164     void seek_by_jump(int fd, off_t amount) FAST_FUNC;
165     void seek_by_read(int fd, off_t amount) FAST_FUNC;