MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ZSTD_resetCCtx_internal

Function ZSTD_resetCCtx_internal

freebsd/contrib/openzfs/module/zstd/lib/zstd.c:14503–14671  ·  view source on GitHub ↗

! ZSTD_resetCCtx_internal() : note : `params` are assumed fully validated at this stage */

Source from the content-addressed store, hash-verified

14501/*! ZSTD_resetCCtx_internal() :
14502 note : `params` are assumed fully validated at this stage */
14503static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
14504 ZSTD_CCtx_params params,
14505 U64 const pledgedSrcSize,
14506 ZSTD_compResetPolicy_e const crp,
14507 ZSTD_buffered_policy_e const zbuff)
14508{
14509 ZSTD_cwksp* const ws = &zc->workspace;
14510 DEBUGLOG(4, "ZSTD_resetCCtx_internal: pledgedSrcSize=%u, wlog=%u",
14511 (U32)pledgedSrcSize, params.cParams.windowLog);
14512 assert(!ZSTD_isError(ZSTD_checkCParams(params.cParams)));
14513
14514 zc->isFirstBlock = 1;
14515
14516 if (params.ldmParams.enableLdm) {
14517 /* Adjust long distance matching parameters */
14518 ZSTD_ldm_adjustParameters(&params.ldmParams, &params.cParams);
14519 assert(params.ldmParams.hashLog >= params.ldmParams.bucketSizeLog);
14520 assert(params.ldmParams.hashRateLog < 32);
14521 zc->ldmState.hashPower = ZSTD_rollingHash_primePower(params.ldmParams.minMatchLength);
14522 }
14523
14524 { size_t const windowSize = MAX(1, (size_t)MIN(((U64)1 << params.cParams.windowLog), pledgedSrcSize));
14525 size_t const blockSize = MIN(ZSTD_BLOCKSIZE_MAX, windowSize);
14526 U32 const divider = (params.cParams.minMatch==3) ? 3 : 4;
14527 size_t const maxNbSeq = blockSize / divider;
14528 size_t const tokenSpace = ZSTD_cwksp_alloc_size(WILDCOPY_OVERLENGTH + blockSize)
14529 + ZSTD_cwksp_alloc_size(maxNbSeq * sizeof(seqDef))
14530 + 3 * ZSTD_cwksp_alloc_size(maxNbSeq * sizeof(BYTE));
14531 size_t const buffOutSize = (zbuff==ZSTDb_buffered) ? ZSTD_compressBound(blockSize)+1 : 0;
14532 size_t const buffInSize = (zbuff==ZSTDb_buffered) ? windowSize + blockSize : 0;
14533 size_t const matchStateSize = ZSTD_sizeof_matchState(&params.cParams, /* forCCtx */ 1);
14534 size_t const maxNbLdmSeq = ZSTD_ldm_getMaxNbSeq(params.ldmParams, blockSize);
14535
14536 ZSTD_indexResetPolicy_e needsIndexReset = zc->initialized ? ZSTDirp_continue : ZSTDirp_reset;
14537
14538 if (ZSTD_indexTooCloseToMax(zc->blockState.matchState.window)) {
14539 needsIndexReset = ZSTDirp_reset;
14540 }
14541
14542 if (!zc->staticSize) ZSTD_cwksp_bump_oversized_duration(ws, 0);
14543
14544 /* Check if workspace is large enough, alloc a new one if needed */
14545 { size_t const cctxSpace = zc->staticSize ? ZSTD_cwksp_alloc_size(sizeof(ZSTD_CCtx)) : 0;
14546 size_t const entropySpace = ZSTD_cwksp_alloc_size(HUF_WORKSPACE_SIZE);
14547 size_t const blockStateSpace = 2 * ZSTD_cwksp_alloc_size(sizeof(ZSTD_compressedBlockState_t));
14548 size_t const bufferSpace = ZSTD_cwksp_alloc_size(buffInSize) + ZSTD_cwksp_alloc_size(buffOutSize);
14549 size_t const ldmSpace = ZSTD_ldm_getTableSize(params.ldmParams);
14550 size_t const ldmSeqSpace = ZSTD_cwksp_alloc_size(maxNbLdmSeq * sizeof(rawSeq));
14551
14552 size_t const neededSpace =
14553 cctxSpace +
14554 entropySpace +
14555 blockStateSpace +
14556 ldmSpace +
14557 ldmSeqSpace +
14558 matchStateSize +
14559 tokenSpace +
14560 bufferSpace;

Callers 4

ZSTD_copyCCtx_internalFunction · 0.70

Calls 15

memsetFunction · 0.85
ZSTD_isErrorFunction · 0.70
ZSTD_checkCParamsFunction · 0.70
ZSTD_cwksp_alloc_sizeFunction · 0.70
ZSTD_compressBoundFunction · 0.70
ZSTD_sizeof_matchStateFunction · 0.70
ZSTD_ldm_getMaxNbSeqFunction · 0.70
ZSTD_indexTooCloseToMaxFunction · 0.70
ZSTD_ldm_getTableSizeFunction · 0.70

Tested by

no test coverage detected