aboutsummaryrefslogtreecommitdiff
path: root/archival
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-07-01 05:12:28 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2010-07-01 05:12:28 +0200
commit45f66167fe96de219aac91d842f3e64d857340f6 (patch)
treec141f2aa8213089258125b370a7427bf14937aaf /archival
parent620e863ba24fe9e0126d1540e89a531264021a77 (diff)
downloadbusybox-w32-45f66167fe96de219aac91d842f3e64d857340f6.tar.gz
busybox-w32-45f66167fe96de219aac91d842f3e64d857340f6.tar.bz2
busybox-w32-45f66167fe96de219aac91d842f3e64d857340f6.zip
xz compression detection: avoid the need to seek
function old new delta unpack_unxz 12 67 +55 unpack_xz_stream 2357 2373 +16 xmalloc_read 197 199 +2 setup_unzip_on_fd 118 99 -19 rpm2cpio_main 222 203 -19 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/2 up/down: 73/-38) Total: 35 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'archival')
-rw-r--r--archival/bbunzip.c9
-rw-r--r--archival/libunarchive/decompress_unxz.c4
-rw-r--r--archival/rpm2cpio.c4
3 files changed, 14 insertions, 3 deletions
diff --git a/archival/bbunzip.c b/archival/bbunzip.c
index b243afb2e..832a7bbf3 100644
--- a/archival/bbunzip.c
+++ b/archival/bbunzip.c
@@ -373,6 +373,15 @@ int unlzma_main(int argc UNUSED_PARAM, char **argv)
373static 373static
374IF_DESKTOP(long long) int FAST_FUNC unpack_unxz(unpack_info_t *info UNUSED_PARAM) 374IF_DESKTOP(long long) int FAST_FUNC unpack_unxz(unpack_info_t *info UNUSED_PARAM)
375{ 375{
376 struct {
377 uint32_t v1;
378 uint16_t v2;
379 } magic;
380 xread(STDIN_FILENO, &magic, 6);
381 if (magic.v1 != XZ_MAGIC1a || magic.v2 != XZ_MAGIC2a) {
382 bb_error_msg("invalid magic");
383 return -1;
384 }
376 return unpack_xz_stream(STDIN_FILENO, STDOUT_FILENO); 385 return unpack_xz_stream(STDIN_FILENO, STDOUT_FILENO);
377} 386}
378int unxz_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 387int unxz_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
diff --git a/archival/libunarchive/decompress_unxz.c b/archival/libunarchive/decompress_unxz.c
index 5d7513a2e..721acd907 100644
--- a/archival/libunarchive/decompress_unxz.c
+++ b/archival/libunarchive/decompress_unxz.c
@@ -56,9 +56,11 @@ unpack_xz_stream(int src_fd, int dst_fd)
56 if (!crc32_table) 56 if (!crc32_table)
57 crc32_table = crc32_filltable(NULL, /*endian:*/ 0); 57 crc32_table = crc32_filltable(NULL, /*endian:*/ 0);
58 58
59 membuf = xmalloc(2 * BUFSIZ);
60 memset(&iobuf, 0, sizeof(iobuf)); 59 memset(&iobuf, 0, sizeof(iobuf));
60 /* Preload XZ file signature */
61 membuf = (void*) strcpy(xmalloc(2 * BUFSIZ), HEADER_MAGIC);
61 iobuf.in = membuf; 62 iobuf.in = membuf;
63 iobuf.in_size = HEADER_MAGIC_SIZE;
62 iobuf.out = membuf + BUFSIZ; 64 iobuf.out = membuf + BUFSIZ;
63 iobuf.out_size = BUFSIZ; 65 iobuf.out_size = BUFSIZ;
64 66
diff --git a/archival/rpm2cpio.c b/archival/rpm2cpio.c
index 1f67fa887..b23d5afa9 100644
--- a/archival/rpm2cpio.c
+++ b/archival/rpm2cpio.c
@@ -92,8 +92,8 @@ int rpm2cpio_main(int argc UNUSED_PARAM, char **argv)
92 xread(rpm_fd, magic.b32, sizeof(magic.b32[0])); 92 xread(rpm_fd, magic.b32, sizeof(magic.b32[0]));
93 if (magic.b32[0] != XZ_MAGIC2) 93 if (magic.b32[0] != XZ_MAGIC2)
94 goto no_magic; 94 goto no_magic;
95 /* unpack_xz_stream wants fd at position 0 */ 95 /* unpack_xz_stream wants fd at position 6, no need to seek */
96 xlseek(rpm_fd, -6, SEEK_CUR); 96 //xlseek(rpm_fd, -6, SEEK_CUR);
97 unpack = unpack_xz_stream; 97 unpack = unpack_xz_stream;
98 } else { 98 } else {
99 no_magic: 99 no_magic: