[git commit] libarchive: fix open_zipped()

Denys Vlasenko vda.linux at googlemail.com
Mon Jun 20 09:42:00 UTC 2016


commit: https://git.busybox.net/busybox/commit/?id=df3ec0e2f70d67f1f880bee933985732b455ee76
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Last commit broke it (on both MMU and NOMMU)

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 archival/libarchive/open_transformer.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/archival/libarchive/open_transformer.c b/archival/libarchive/open_transformer.c
index d93c836..dd15a9b 100644
--- a/archival/libarchive/open_transformer.c
+++ b/archival/libarchive/open_transformer.c
@@ -220,7 +220,6 @@ static transformer_state_t *setup_transformer_on_fd(int fd, int fail_if_not_comp
 	 */
 //	USE_FOR_MMU(xstate->xformer = copy_stream;)
 //	USE_FOR_NOMMU(xstate->xformer_prog = "cat";)
-	/* fall through to seeking bck over bytes we read earlier */
 
  found_magic:
 	return xstate;
@@ -289,16 +288,22 @@ int FAST_FUNC open_zipped(const char *fname, int fail_if_not_compressed)
 		return -1;
 
 	fd = xstate->src_fd;
-	if (xstate->xformer) {
 # if BB_MMU
-		fork_transformer_with_no_sig(xstate->src_fd, xstate->xformer);
-# else
+	if (xstate->xformer) {
+		fork_transformer_with_no_sig(fd, xstate->xformer);
+	} else {
+		/* the file is not compressed */
 		xlseek(fd, - xstate->signature_skipped, SEEK_CUR);
 		xstate->signature_skipped = 0;
-		fork_transformer_with_sig(xstate->src_fd, xstate->xformer, xstate->xformer_prog);
-# endif
 	}
-	/* else: the file is not compressed */
+# else
+	/* NOMMU can't avoid the seek :( */
+	xlseek(fd, - xstate->signature_skipped, SEEK_CUR);
+	xstate->signature_skipped = 0;
+	if (xstate->xformer) {
+		fork_transformer_with_sig(fd, xstate->xformer, xstate->xformer_prog);
+	} /* esle: the file is not compressed */
+# endif
 
 	free(xstate);
 	return fd;


More information about the busybox-cvs mailing list