]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
ZSTD_resetDStream moved to inflate() 393/head
authorinikep <inikep@gmail.com>
Tue, 27 Sep 2016 16:21:17 +0000 (18:21 +0200)
committerinikep <inikep@gmail.com>
Tue, 27 Sep 2016 16:21:17 +0000 (18:21 +0200)
zlibWrapper/zstd_zlibwrapper.c
zlibWrapper/zstd_zlibwrapper.h

index 97f9269a4d003bcee9c49ddf5d52311a6cd64f1d..31e784a80e899b0205e5e2394f3d5ac3c629ba48 100644 (file)
@@ -480,6 +480,7 @@ ZEXTERN int ZEXPORT z_inflateInit_ OF((z_streamp strm,
                                      const char *version, int stream_size))
 {
     if (g_ZWRAPdecompressionType == ZWRAP_FORCE_ZLIB) {
+        strm->reserved = ZWRAP_ZLIB_STREAM; /* mark as zlib stream */
         return inflateInit(strm);
     }
 
@@ -530,10 +531,6 @@ int ZWRAP_inflateReset_keepDict(z_streamp strm)
 
     {   ZWRAP_DCtx* zwd = (ZWRAP_DCtx*) strm->state;
         if (zwd == NULL) return Z_STREAM_ERROR;
-        if (zwd->zbd) { 
-            size_t const errorCode = ZSTD_resetDStream(zwd->zbd);
-            if (ZSTD_isError(errorCode)) return ZWRAPD_finishWithError(zwd, strm, 0); 
-        }
         ZWRAP_initDCtx(zwd);
         zwd->decompState = ZWRAP_useReset;
     }
@@ -707,6 +704,7 @@ ZEXTERN int ZEXPORT z_inflate OF((z_streamp strm, int flush))
         if (!zwd->zbd) {
             zwd->zbd = ZSTD_createDStream_advanced(zwd->customMem);
             if (zwd->zbd == NULL) { LOG_WRAPPERD("ERROR: ZSTD_createDStream_advanced\n"); goto error; }
+            zwd->decompState = ZWRAP_useInit;
         }
 
         if (strm->total_in < ZSTD_HEADERSIZE)
@@ -715,6 +713,9 @@ ZEXTERN int ZEXPORT z_inflate OF((z_streamp strm, int flush))
                 if (zwd->decompState == ZWRAP_useInit) {
                     errorCode = ZSTD_initDStream(zwd->zbd);
                     if (ZSTD_isError(errorCode)) { LOG_WRAPPERD("ERROR: ZSTD_initDStream errorCode=%s\n", ZSTD_getErrorName(errorCode)); goto error; }
+                } else {
+                    errorCode = ZSTD_resetDStream(zwd->zbd);
+                    if (ZSTD_isError(errorCode)) goto error;
                 }
             } else {
                 srcSize = MIN(strm->avail_in, ZSTD_HEADERSIZE - strm->total_in);
@@ -724,8 +725,13 @@ ZEXTERN int ZEXPORT z_inflate OF((z_streamp strm, int flush))
                 strm->avail_in -= srcSize;
                 if (strm->total_in < ZSTD_HEADERSIZE) return Z_OK;
 
-                errorCode = ZSTD_initDStream(zwd->zbd);
-                if (ZSTD_isError(errorCode)) { LOG_WRAPPERD("ERROR: ZSTD_initDStream errorCode=%s\n", ZSTD_getErrorName(errorCode)); goto error; }
+                if (zwd->decompState == ZWRAP_useInit) {
+                    errorCode = ZSTD_initDStream(zwd->zbd);
+                    if (ZSTD_isError(errorCode)) { LOG_WRAPPERD("ERROR: ZSTD_initDStream errorCode=%s\n", ZSTD_getErrorName(errorCode)); goto error; }
+                } else {
+                    errorCode = ZSTD_resetDStream(zwd->zbd);
+                    if (ZSTD_isError(errorCode)) goto error;
+                }
 
                 zwd->inBuffer.src = zwd->headerBuf;
                 zwd->inBuffer.size = ZSTD_HEADERSIZE;
index 9abbb7aa2af4b8702ea3dae0d72b5121883884ac..873413907eda19f0c39c1d537789fcdb8b3e0fd2 100644 (file)
@@ -61,7 +61,8 @@ void ZWRAP_setDecompressionType(ZWRAP_decompress_type type);
 /* checks zstd decompression type */
 ZWRAP_decompress_type ZWRAP_getDecompressionType(void);
 
-/* checks if zstd decompression is used for a given stream */
+/* Checks if zstd decompression is used for a given stream.
+   If will return 1 only when inflate() was called and zstd header was detected. */
 int ZWRAP_isUsingZSTDdecompression(z_streamp strm);
 
 /* Similar to inflateReset but preserves dictionary set using inflateSetDictionary.