libarchive: fix open_zipped()
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 20 Jun 2016 09:42:00 +0000 (11:42 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 20 Jun 2016 09:42:00 +0000 (11:42 +0200)
Last commit broke it (on both MMU and NOMMU)

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
archival/libarchive/open_transformer.c

index d93c8366f3d569b5a8d15685b45b3166efde5ffb..dd15a9b1f559b743c27913bb3439361ceee8b61b 100644 (file)
@@ -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;