]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
improved inflateSync
authorinikep <inikep@gmail.com>
Mon, 19 Sep 2016 12:27:29 +0000 (14:27 +0200)
committerinikep <inikep@gmail.com>
Mon, 19 Sep 2016 12:27:29 +0000 (14:27 +0200)
zlibWrapper/README.md
zlibWrapper/zstd_zlibwrapper.c

index 3a39f00ae715a15df497ff6ace31fb66524f906c..5ea542f23d7df3cf7ac77384d55ad69f86e98a51 100644 (file)
@@ -95,6 +95,7 @@ Unsupported methods:
 - deflateSetHeader
 - inflateGetDictionary
 - inflateCopy
+- inflateSync
 - inflateReset
 - inflateReset2
 - inflatePrime
index bb5bd92ade0419fc31a0d66b6e5d2181129c71db..3ed842cc4c9b27af82924f36d39a83e3a5c830e6 100644 (file)
@@ -160,6 +160,14 @@ ZEXTERN int ZEXPORT z_deflateInit2_ OF((z_streamp strm, int level, int method,
 }
 
 
+ZEXTERN int ZEXPORT z_deflateReset OF((z_streamp strm))
+{
+    if (!g_useZSTD)
+        return deflateReset(strm);
+    FINISH_WITH_ERR(strm, "deflateReset is not supported!");
+}
+
+
 ZEXTERN int ZEXPORT z_deflateSetDictionary OF((z_streamp strm,
                                              const Bytef *dictionary,
                                              uInt  dictLength))
@@ -217,7 +225,7 @@ ZEXTERN int ZEXPORT z_deflate OF((z_streamp strm, int flush))
         strm->avail_in -= zwc->inBuffer.pos;
     }
 
-    if (flush == Z_FULL_FLUSH) FINISH_WITH_ERR(strm, "Z_FULL_FLUSH is not supported!");
+    if (flush == Z_FULL_FLUSH || flush == Z_BLOCK || flush == Z_TREES) FINISH_WITH_ERR(strm, "Z_FULL_FLUSH, Z_BLOCK and Z_TREES are not supported!");
 
     if (flush == Z_FINISH) {
         size_t bytesLeft;
@@ -233,7 +241,7 @@ ZEXTERN int ZEXPORT z_deflate OF((z_streamp strm, int flush))
         if (bytesLeft == 0) return Z_STREAM_END;
     }
     else
-    if (flush == Z_SYNC_FLUSH) {
+    if (flush == Z_SYNC_FLUSH || flush == Z_PARTIAL_FLUSH) {
         size_t bytesLeft;
         zwc->outBuffer.dst = strm->next_out;
         zwc->outBuffer.size = strm->avail_out;
@@ -486,6 +494,8 @@ ZEXTERN int ZEXPORT z_inflate OF((z_streamp strm, int flush))
             errorCode = ZSTD_initDStream(zwd->zbd);
             if (ZSTD_isError(errorCode)) goto error;
 
+            if (flush == Z_INFLATE_SYNC) { strm->msg = "inflateSync is not supported!"; goto error; }
+
             inPos = zwd->inBuffer.pos;
             zwd->inBuffer.src = zwd->headerBuf;
             zwd->inBuffer.size = ZSTD_HEADERSIZE;
@@ -553,6 +563,9 @@ ZEXTERN int ZEXPORT z_inflateEnd OF((z_streamp strm))
 
 ZEXTERN int ZEXPORT z_inflateSync OF((z_streamp strm))
 {
+    if (!strm->reserved)
+        return z_inflateSync(strm);
+
     return z_inflate(strm, Z_INFLATE_SYNC);
 }
 
@@ -569,14 +582,6 @@ ZEXTERN int ZEXPORT z_deflateCopy OF((z_streamp dest,
 }
 
 
-ZEXTERN int ZEXPORT z_deflateReset OF((z_streamp strm))
-{
-    if (!g_useZSTD)
-        return deflateReset(strm);
-    FINISH_WITH_ERR(strm, "deflateReset is not supported!");
-}
-
-
 ZEXTERN int ZEXPORT z_deflateTune OF((z_streamp strm,
                                     int good_length,
                                     int max_lazy,
@@ -622,7 +627,7 @@ ZEXTERN int ZEXPORT z_deflateSetHeader OF((z_streamp strm,
 
 
 
-/* Advanced compression functions */
+/* Advanced decompression functions */
 #if ZLIB_VERNUM >= 0x1280
 ZEXTERN int ZEXPORT z_inflateGetDictionary OF((z_streamp strm,
                                              Bytef *dictionary,