Annotation of /trunk/busybox/patches/busybox-1.19.2-tar-seamless-xz.patch
Parent Directory | Revision Log
Revision 1523 -
(hide annotations)
(download)
Thu Sep 8 21:40:13 2011 UTC (13 years ago) by niro
File size: 7102 byte(s)
Thu Sep 8 21:40:13 2011 UTC (13 years 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; |