less: document -S flag and make it independently configurable
[oweals/busybox.git] / archival / libarchive / open_transformer.c
index 9d762a8599489b3748f3300939df3ba370749e78..be536a3d7e715f41ef0e1aacd30842092844dc7e 100644 (file)
@@ -43,8 +43,9 @@ ssize_t FAST_FUNC transformer_write(transformer_state_t *xstate, const void *buf
                        nwrote = -1;
                        goto ret;
                }
-               xstate->mem_output_buf = xrealloc(xstate->mem_output_buf, size);
+               xstate->mem_output_buf = xrealloc(xstate->mem_output_buf, size + 1);
                memcpy(xstate->mem_output_buf + pos, buf, bufsize);
+               xstate->mem_output_buf[size] = '\0';
                nwrote = bufsize;
        } else {
                nwrote = full_write(xstate->dst_fd, buf, bufsize);
@@ -184,6 +185,13 @@ static transformer_state_t *setup_transformer_on_fd(int fd, int fail_if_not_comp
                USE_FOR_NOMMU(xstate->xformer_prog = "gunzip";)
                goto found_magic;
        }
+       if (ENABLE_FEATURE_SEAMLESS_Z
+        && magic.b16[0] == COMPRESS_MAGIC
+       ) {
+               xstate->xformer = unpack_Z_stream;
+               USE_FOR_NOMMU(xstate->xformer_prog = "uncompress";)
+               goto found_magic;
+       }
        if (ENABLE_FEATURE_SEAMLESS_BZ2
         && magic.b16[0] == BZIP2_MAGIC
        ) {