From 6948f210ed443f8153e0ba751e77bec8a0c6c8d4 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 30 May 2010 04:18:13 +0200 Subject: *: teach tar et. al. to understand .xz by heart function old new delta unpack_xz_stream - 4126 +4126 setup_unzip_on_fd 80 150 +70 open_zipped 113 131 +18 unpack_unxz 5 12 +7 send_tree 360 353 -7 unpack_xz_stream_stdin 3953 - -3953 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 3/1 up/down: 4221/-3960) Total: 261 bytes Signed-off-by: Denys Vlasenko --- archival/libunarchive/decompress_unxz.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'archival/libunarchive/decompress_unxz.c') diff --git a/archival/libunarchive/decompress_unxz.c b/archival/libunarchive/decompress_unxz.c index 0ae789160..9edc2461a 100644 --- a/archival/libunarchive/decompress_unxz.c +++ b/archival/libunarchive/decompress_unxz.c @@ -3,7 +3,7 @@ * by Lasse Collin * and Igor Pavlov * - * See README file in unxzbz/ directory for more information. + * See README file in unxz/ directory for more information. * * This file is: * Copyright (C) 2010 Denys Vlasenko @@ -48,7 +48,7 @@ static uint32_t xz_crc32(uint32_t *crc32_table, #include "unxz/xz_stream.h" IF_DESKTOP(long long) int FAST_FUNC -unpack_xz_stream_stdin(void) +unpack_xz_stream(int src_fd, int dst_fd) { struct xz_buf iobuf; struct xz_dec *state; @@ -79,7 +79,7 @@ unpack_xz_stream_stdin(void) iobuf.in_pos = 0; rd = IN_SIZE - insz; if (rd) { - rd = safe_read(STDIN_FILENO, membuf + insz, rd); + rd = safe_read(src_fd, membuf + insz, rd); if (rd < 0) { bb_error_msg("read error"); total = -1; @@ -94,10 +94,11 @@ unpack_xz_stream_stdin(void) // iobuf.in_pos, iobuf.in_size, iobuf.out_pos, iobuf.out_size, r); outpos = iobuf.out_pos; if (outpos) { - xwrite(STDOUT_FILENO, iobuf.out, outpos); + xwrite(dst_fd, iobuf.out, outpos); IF_DESKTOP(total += outpos;) } if (r == XZ_STREAM_END + /* this happens even with well-formed files: */ || (r == XZ_BUF_ERROR && insz == 0 && outpos == 0) ) { break; -- cgit v1.2.3