Magellan Linux

Contents of /trunk/busybox/patches/busybox-1.20.2-tar-seamless-xz.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1837 - (show annotations) (download)
Fri Jul 13 09:44:25 2012 UTC (11 years, 9 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;