Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1523 - (show annotations) (download)
Thu Sep 8 21:40:13 2011 UTC (12 years, 7 months ago) by niro
File size: 7102 byte(s)
support tar -J and decide between lzma or xz compression
1 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;