]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Fix ZSTD_createCStream_usingCDict() and ZSTD_compress_usingCDict()
authorNick Terrell <terrelln@fb.com>
Tue, 4 Apr 2017 18:52:49 +0000 (11:52 -0700)
committerNick Terrell <terrelln@fb.com>
Tue, 4 Apr 2017 18:52:49 +0000 (11:52 -0700)
contrib/linux-kernel/include/zstd.h
contrib/linux-kernel/lib/zstd_compress.c

index fde751271a751f499b493ae76cb4388b43fb2e57..9d8fc8e0ba8f1123ea98475e0bb06d1ca1a182f8 100644 (file)
@@ -257,7 +257,7 @@ size_t ZSTD_DStreamWorkspaceBound(size_t maxWindowSize);
 typedef struct ZSTD_CStream_s ZSTD_CStream;
 /*===== ZSTD_CStream management functions =====*/
 ZSTDLIB_API ZSTD_CStream* ZSTD_createCStream(ZSTD_parameters params, unsigned long long pledgedSrcSize, void* workspace, size_t workspaceSize);
-ZSTDLIB_API ZSTD_CStream* ZSTD_createCStream_usingCDict(ZSTD_parameters params, const ZSTD_CDict* cdict, unsigned long long pledgedSrcSize, void* workspace, size_t workspaceSize);
+ZSTDLIB_API ZSTD_CStream* ZSTD_createCStream_usingCDict(const ZSTD_CDict* cdict, unsigned long long pledgedSrcSize, void* workspace, size_t workspaceSize);
 
 /*===== Streaming compression functions =====*/
 ZSTDLIB_API size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize);  /**< re-use compression parameters from previous init; skip dictionary loading stage; zcs must be init at least once before. note: pledgedSrcSize must be correct, a size of 0 means unknown.  for a frame size of 0 use initCStream_advanced */
index f91f9f01653ea31946349e5235cddcbeef2cd309..e57cd6baa7c336eef410d50796382e88d0a888ba 100644 (file)
@@ -2861,6 +2861,8 @@ size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx,
        if (cdict->refContext->params.fParams.contentSizeFlag==1) {
                cctx->params.fParams.contentSizeFlag = 1;
                cctx->frameContentSize = srcSize;
+       } else {
+               cctx->params.fParams.contentSizeFlag = 0;
        }
 
        return ZSTD_compressEnd(cctx, dst, dstCapacity, src, srcSize);
@@ -3015,12 +3017,15 @@ ZSTD_CStream* ZSTD_createCStream(ZSTD_parameters params, unsigned long long pled
        return zcs;
 }
 
-ZSTD_CStream* ZSTD_createCStream_usingCDict(ZSTD_parameters params, const ZSTD_CDict* cdict, unsigned long long pledgedSrcSize, void* workspace, size_t workspaceSize)
+ZSTD_CStream* ZSTD_createCStream_usingCDict(const ZSTD_CDict* cdict, unsigned long long pledgedSrcSize, void* workspace, size_t workspaceSize)
 {
+       ZSTD_parameters const params = ZSTD_getParamsFromCDict(cdict);
        ZSTD_CStream* const zcs = ZSTD_createCStream(params, pledgedSrcSize, workspace, workspaceSize);
        if (zcs) {
                zcs->cdict = cdict;
-               zcs->cctx->dictID = params.fParams.noDictIDFlag ? 0 : cdict->refContext->dictID;
+               if (ZSTD_isError(ZSTD_resetCStream_internal(zcs, pledgedSrcSize))) {
+                       return NULL;
+               }
        }
        return zcs;
 }