reinforced fix for huge files
This commit is contained in:
@@ -2248,6 +2248,7 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc, void* dst, size_t dstCa
|
|||||||
* Frame is supposed already started (header already produced)
|
* Frame is supposed already started (header already produced)
|
||||||
* @return : compressed size, or an error code
|
* @return : compressed size, or an error code
|
||||||
*/
|
*/
|
||||||
|
#include <stdio.h>
|
||||||
static size_t ZSTD_compress_generic (ZSTD_CCtx* cctx,
|
static size_t ZSTD_compress_generic (ZSTD_CCtx* cctx,
|
||||||
void* dst, size_t dstCapacity,
|
void* dst, size_t dstCapacity,
|
||||||
const void* src, size_t srcSize,
|
const void* src, size_t srcSize,
|
||||||
@@ -2274,8 +2275,10 @@ static size_t ZSTD_compress_generic (ZSTD_CCtx* cctx,
|
|||||||
if (cctx->lowLimit > (1<<30)) {
|
if (cctx->lowLimit > (1<<30)) {
|
||||||
U32 const btplus = (cctx->params.cParams.strategy == ZSTD_btlazy2) | (cctx->params.cParams.strategy == ZSTD_btopt);
|
U32 const btplus = (cctx->params.cParams.strategy == ZSTD_btlazy2) | (cctx->params.cParams.strategy == ZSTD_btopt);
|
||||||
U32 const chainMask = (1 << (cctx->params.cParams.chainLog - btplus)) - 1;
|
U32 const chainMask = (1 << (cctx->params.cParams.chainLog - btplus)) - 1;
|
||||||
U32 const newLowLimit = (cctx->lowLimit & chainMask) + (chainMask+1); /* preserve position % chainSize, ensure current-repcode doesn't underflow */
|
U32 const supLog = MAX(cctx->params.cParams.chainLog, 17 /* blockSize */);
|
||||||
|
U32 const newLowLimit = (cctx->lowLimit & chainMask) + (1 << supLog); /* preserve position % chainSize, ensure current-repcode doesn't underflow */
|
||||||
U32 const correction = cctx->lowLimit - newLowLimit;
|
U32 const correction = cctx->lowLimit - newLowLimit;
|
||||||
|
fprintf(stderr, "chainMask : %u \n", chainMask);
|
||||||
ZSTD_reduceIndex(cctx, correction);
|
ZSTD_reduceIndex(cctx, correction);
|
||||||
cctx->base += correction;
|
cctx->base += correction;
|
||||||
cctx->dictBase += correction;
|
cctx->dictBase += correction;
|
||||||
|
|||||||
Reference in New Issue
Block a user