From 2ed3ba2a35a83765b35235aa77f1d68f183273ba Mon Sep 17 00:00:00 2001 From: Dmitry Krot Date: Sat, 13 Aug 2016 22:02:45 +0300 Subject: [PATCH] Fix issue with SYNC_FLUSH support by zlib wrapper --- zlibWrapper/zstd_zlibwrapper.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/zlibWrapper/zstd_zlibwrapper.c b/zlibWrapper/zstd_zlibwrapper.c index 34de73a6d..e23a235c9 100644 --- a/zlibWrapper/zstd_zlibwrapper.c +++ b/zlibWrapper/zstd_zlibwrapper.c @@ -227,7 +227,7 @@ ZEXTERN int ZEXPORT z_deflate OF((z_streamp strm, int flush)) if (flush == Z_FULL_FLUSH) FINISH_WITH_ERR(strm, "Z_FULL_FLUSH is not supported!"); - if (flush == Z_FINISH || flush == Z_FULL_FLUSH) { + if (flush == Z_FINISH) { size_t bytesLeft; size_t dstCapacity = strm->avail_out; if (zwc->bytesLeft) { @@ -246,6 +246,18 @@ ZEXTERN int ZEXPORT z_deflate OF((z_streamp strm, int flush)) if (flush == Z_FINISH && bytesLeft == 0) return Z_STREAM_END; zwc->bytesLeft = bytesLeft; } + + if (flush == Z_SYNC_FLUSH) { + size_t bytesLeft; + size_t dstCapacity = strm->avail_out; + bytesLeft = ZBUFF_compressFlush(zwc->zbc, strm->next_out, &dstCapacity); + LOG_WRAPPER("ZBUFF_compressFlush avail_out=%d dstCapacity=%d bytesLeft=%d\n", (int)strm->avail_out, (int)dstCapacity, (int)bytesLeft); + if (ZSTD_isError(bytesLeft)) return Z_MEM_ERROR; + strm->next_out += dstCapacity; + strm->total_out += dstCapacity; + strm->avail_out -= dstCapacity; + zwc->bytesLeft = bytesLeft; + } return Z_OK; }