Eliminated seeks so that we work correctly on pipes, and removed reliance on
undefined evaluation ordering.  Thanks to Anthony Towns for explanation and
solution.
diff --git a/archival/libunarchive/decompress_unzip.c b/archival/libunarchive/decompress_unzip.c
index b843ec8..9568c28 100644
--- a/archival/libunarchive/decompress_unzip.c
+++ b/archival/libunarchive/decompress_unzip.c
@@ -904,6 +904,7 @@
 	int method;
 	typedef void (*sig_type) (int);
 	int exit_code=0;	/* program exit code */
+	int i;
 
 	in_file = l_in_file;
 	out_file = l_out_file;
@@ -949,10 +950,16 @@
 	flags = (unsigned char) fgetc(in_file);
 
 	/* Ignore time stamp(4), extra flags(1), OS type(1) */
-	fseek(in_file, 6, SEEK_CUR);
+	for (i = 0; i < 6; i++)
+		fgetc(in_file);
 
 	if ((flags & extra_field) != 0) {
-		fseek(in_file, (size_t) fgetc(in_file) + ((size_t)fgetc(in_file) << 8), SEEK_CUR);
+		size_t extra;
+		extra = fgetc(in_file);
+		extra += fgetc(in_file) << 8;
+
+		for (i = 0; i < extra; i++)
+			fgetc(in_file);
 	}
 
 	/* Discard original name if any */