Contents of /trunk/busybox/patches/busybox-1.20.2-tar-seamless-xz.patch
Parent Directory | Revision Log
Revision 1837 -
(show annotations)
(download)
Fri Jul 13 09:44:25 2012 UTC (12 years, 2 months ago) by niro
File size: 7705 byte(s)
Fri Jul 13 09:44:25 2012 UTC (12 years, 2 months ago) by niro
File size: 7705 byte(s)
-rediffed against busybox-1.20.2
1 | diff -Naur busybox-1.20.2/archival/libarchive/filter_accept_list_reassign.c busybox-1.20.2-magellan/archival/libarchive/filter_accept_list_reassign.c |
2 | --- busybox-1.20.2/archival/libarchive/filter_accept_list_reassign.c 2012-06-26 15:35:45.000000000 +0200 |
3 | +++ busybox-1.20.2-magellan/archival/libarchive/filter_accept_list_reassign.c 2012-07-13 12:15:10.649986771 +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.20.2/archival/libarchive/get_header_tar_xz.c busybox-1.20.2-magellan/archival/libarchive/get_header_tar_xz.c |
18 | --- busybox-1.20.2/archival/libarchive/get_header_tar_xz.c 1970-01-01 01:00:00.000000000 +0100 |
19 | +++ busybox-1.20.2-magellan/archival/libarchive/get_header_tar_xz.c 2012-07-13 12:13:24.191983102 +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) 2012 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 "bb_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_with_sig(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_with_sig(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.20.2/archival/libarchive/Kbuild.src busybox-1.20.2-magellan/archival/libarchive/Kbuild.src |
61 | --- busybox-1.20.2/archival/libarchive/Kbuild.src 2012-06-26 15:35:45.000000000 +0200 |
62 | +++ busybox-1.20.2-magellan/archival/libarchive/Kbuild.src 2012-07-13 12:15:47.140983876 +0200 |
63 | @@ -59,7 +59,7 @@ |
64 | lib-$(CONFIG_FEATURE_SEAMLESS_GZ) += open_transformer.o decompress_gunzip.o |
65 | lib-$(CONFIG_FEATURE_SEAMLESS_BZ2) += open_transformer.o decompress_bunzip2.o |
66 | lib-$(CONFIG_FEATURE_SEAMLESS_LZMA) += open_transformer.o decompress_unlzma.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) += open_transformer.o 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.20.2/archival/tar.c busybox-1.20.2-magellan/archival/tar.c |
73 | --- busybox-1.20.2/archival/tar.c 2012-07-02 16:08:25.000000000 +0200 |
74 | +++ busybox-1.20.2-magellan/archival/tar.c 2012-07-13 12:27:19.799982146 +0200 |
75 | @@ -696,6 +696,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 | @@ -726,6 +727,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 | @@ -762,6 +766,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 | @@ -786,6 +791,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 | @@ -796,7 +802,7 @@ |
110 | OPT_NOPRESERVE_PERM = IF_FEATURE_TAR_LONG_OPTIONS((1 << OPTBIT_NOPRESERVE_PERM)) + 0, // no-same-permissions |
111 | OPT_OVERWRITE = IF_FEATURE_TAR_LONG_OPTIONS((1 << OPTBIT_OVERWRITE )) + 0, // overwrite |
112 | |
113 | - OPT_ANY_COMPRESS = (OPT_BZIP2 | OPT_LZMA | OPT_GZIP | OPT_COMPRESS), |
114 | + OPT_ANY_COMPRESS = (OPT_BZIP2 | OPT_LZMA | OPT_XZ | OPT_GZIP | OPT_COMPRESS), |
115 | }; |
116 | #if ENABLE_FEATURE_TAR_LONG_OPTIONS |
117 | static const char tar_longopts[] ALIGN1 = |
118 | @@ -822,6 +828,9 @@ |
119 | # if ENABLE_FEATURE_SEAMLESS_LZMA |
120 | "lzma\0" No_argument "a" |
121 | # endif |
122 | +# if ENABLE_FEATURE_SEAMLESS_XZ |
123 | + "xz\0" No_argument "J" |
124 | +# endif |
125 | # if ENABLE_FEATURE_TAR_FROM |
126 | "files-from\0" Required_argument "T" |
127 | "exclude-from\0" Required_argument "X" |
128 | @@ -919,6 +928,7 @@ |
129 | IF_FEATURE_TAR_CREATE( "ch" ) |
130 | IF_FEATURE_SEAMLESS_BZ2( "j" ) |
131 | IF_FEATURE_SEAMLESS_LZMA("a" ) |
132 | + IF_FEATURE_SEAMLESS_XZ( "J" ) |
133 | IF_FEATURE_TAR_FROM( "T:X:") |
134 | IF_FEATURE_SEAMLESS_GZ( "z" ) |
135 | IF_FEATURE_SEAMLESS_Z( "Z" ) |
136 | @@ -1071,6 +1081,9 @@ |
137 | if (opt & OPT_LZMA) |
138 | USE_FOR_MMU(xformer = unpack_lzma_stream;) |
139 | USE_FOR_NOMMU(xformer_prog = "unlzma";) |
140 | + if (opt & OPT_XZ) |
141 | + USE_FOR_MMU(xformer = unpack_xz_stream;) |
142 | + USE_FOR_NOMMU(xformer_prog = "unxz";) |
143 | |
144 | open_transformer_with_sig(tar_handle->src_fd, xformer, xformer_prog); |
145 | /* Can't lseek over pipes */ |
146 | diff -Naur busybox-1.20.2/include/bb_archive.h busybox-1.20.2-magellan/include/bb_archive.h |
147 | --- busybox-1.20.2/include/bb_archive.h 2012-07-02 16:08:25.000000000 +0200 |
148 | +++ busybox-1.20.2-magellan/include/bb_archive.h 2012-07-13 12:29:25.386980771 +0200 |
149 | @@ -9,6 +9,8 @@ |
150 | COMPRESS_MAGIC = 0x1f9d, |
151 | GZIP_MAGIC = 0x1f8b, |
152 | BZIP2_MAGIC = 256 * 'B' + 'Z', |
153 | + /* lzma default options: lc=3 lp=0 pb=2, historic % 256 == 0 */ |
154 | + LZMA_DEFAULT_MAGIC = 0x5d00, |
155 | /* .xz signature: 0xfd, '7', 'z', 'X', 'Z', 0x00 */ |
156 | /* More info at: http://tukaani.org/xz/xz-file-format.txt */ |
157 | XZ_MAGIC1 = 256 * 0xfd + '7', |
158 | @@ -21,6 +23,8 @@ |
159 | COMPRESS_MAGIC = 0x9d1f, |
160 | GZIP_MAGIC = 0x8b1f, |
161 | BZIP2_MAGIC = 'B' + 'Z' * 256, |
162 | + /* lzma default options: lc=3 lp=0 pb=2, historic % 256 == 0 */ |
163 | + LZMA_DEFAULT_MAGIC = 0x5d, |
164 | XZ_MAGIC1 = 0xfd + '7' * 256, |
165 | XZ_MAGIC2 = 'z' + ('X' + ('Z' + 0 * 256) * 256) * 256, |
166 | XZ_MAGIC1a = 0xfd + ('7' + ('z' + 'X' * 256) * 256) * 256, |
167 | @@ -180,6 +184,7 @@ |
168 | char get_header_tar_gz(archive_handle_t *archive_handle) FAST_FUNC; |
169 | char get_header_tar_bz2(archive_handle_t *archive_handle) FAST_FUNC; |
170 | char get_header_tar_lzma(archive_handle_t *archive_handle) FAST_FUNC; |
171 | +char get_header_tar_xz(archive_handle_t *archive_handle) FAST_FUNC; |
172 | |
173 | void seek_by_jump(int fd, off_t amount) FAST_FUNC; |
174 | void seek_by_read(int fd, off_t amount) FAST_FUNC; |