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;
 	        }
 	}
 

Reply via email to