Module Name: src Committed By: snj Date: Sun Nov 8 22:51:56 UTC 2009
Modified Files: src/usr.bin/gzip [netbsd-5]: unbzip2.c Log Message: Pull up following revision(s) (requested by mrg in ticket #1131): usr.bin/gzip/unbzip2.c: revision 1.12 fix support for multi-section bzip2 files, as created by pbzip2. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.11.6.1 src/usr.bin/gzip/unbzip2.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/gzip/unbzip2.c diff -u src/usr.bin/gzip/unbzip2.c:1.11 src/usr.bin/gzip/unbzip2.c:1.11.6.1 --- src/usr.bin/gzip/unbzip2.c:1.11 Mon Apr 28 20:24:13 2008 +++ src/usr.bin/gzip/unbzip2.c Sun Nov 8 22:51:56 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: unbzip2.c,v 1.11 2008/04/28 20:24:13 martin Exp $ */ +/* $NetBSD: unbzip2.c,v 1.11.6.1 2009/11/08 22:51:56 snj Exp $ */ /*- * Copyright (c) 2006 The NetBSD Foundation, Inc. @@ -62,7 +62,7 @@ if (bytes_in) *bytes_in = prelen; - while (ret >= BZ_OK && ret != BZ_STREAM_END) { + while (ret == BZ_OK) { if (bzs.avail_in == 0 && !end_of_file) { ssize_t n; @@ -86,7 +86,7 @@ case BZ_OK: if (ret == BZ_OK && end_of_file) maybe_err("read"); - if (!tflag) { + if (!tflag && bzs.avail_out != BUFLEN) { ssize_t n; n = write(out, outbuf, BUFLEN - bzs.avail_out); @@ -94,7 +94,13 @@ maybe_err("write"); bytes_out += n; } - break; + if (ret == BZ_STREAM_END && !end_of_file) { + if (BZ2_bzDecompressEnd(&bzs) != BZ_OK || + BZ2_bzDecompressInit(&bzs, 0, 0) != BZ_OK) + maybe_errx("bzip2 re-init"); + ret = BZ_OK; + } + break; case BZ_DATA_ERROR: maybe_warnx("bzip2 data integrity error"); @@ -107,7 +113,10 @@ case BZ_MEM_ERROR: maybe_warnx("bzip2 out of memory"); break; - + + default: + maybe_warnx("unknown bzip2 error: %d", ret); + break; } }