diff --git a/lib/zstd_compress.c b/lib/zstd_compress.c index 4b345c4a..601df815 100644 --- a/lib/zstd_compress.c +++ b/lib/zstd_compress.c @@ -88,10 +88,10 @@ typedef struct { BYTE* matchLength; BYTE* dumpsStart; BYTE* dumps; - BYTE* matchLengthFreq; - BYTE* litLengthFreq; - BYTE* litFreq; - BYTE* offCodeFreq; + U32* matchLengthFreq; + U32* litLengthFreq; + U32* litFreq; + U32* offCodeFreq; U32 matchLengthSum; U32 litLengthSum; U32 litSum; @@ -111,10 +111,14 @@ static void ZSTD_resetSeqStore(seqStore_t* ssPtr) ssPtr->litSum = (1<offCodeSum = (1<litFreq, 1, (1<litLengthFreq, 1, (1<matchLengthFreq, 1, (1<offCodeFreq, 1, (1<litFreq[i] = 1; + for (int i=0; i<=MaxLL; i++) + ssPtr->litLengthFreq[i] = 1; + for (int i=0; i<=MaxML; i++) + ssPtr->matchLengthFreq[i] = 1; + for (int i=0; i<=MaxOff; i++) + ssPtr->offCodeFreq[i] = 1; } @@ -202,7 +206,7 @@ static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc, /* reserve table memory */ const U32 contentLog = (params.strategy == ZSTD_fast) ? 1 : params.contentLog; const size_t tableSpace = ((1 << contentLog) + (1 << params.hashLog)) * sizeof(U32); - const size_t neededSpace = tableSpace + (256*sizeof(U32)) + (3*blockSize) + (1<workSpaceSize < neededSpace) { free(zc->workSpace); zc->workSpace = malloc(neededSpace); @@ -231,11 +235,11 @@ static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc, zc->seqStore.litLengthStart = zc->seqStore.litStart + blockSize; zc->seqStore.matchLengthStart = zc->seqStore.litLengthStart + (blockSize>>2); zc->seqStore.dumpsStart = zc->seqStore.matchLengthStart + (blockSize>>2); - zc->seqStore.litFreq = zc->seqStore.dumpsStart + (blockSize>>2); + zc->seqStore.litFreq = (U32*) (zc->seqStore.dumpsStart + (blockSize>>2)); zc->seqStore.litLengthFreq = zc->seqStore.litFreq + (1<seqStore.matchLengthFreq = zc->seqStore.litLengthFreq + (1<seqStore.offCodeFreq = zc->seqStore.matchLengthFreq + (1<seqStore.XXX = zc->seqStore.offCodeFreq + (1<seqStore.XXX = zc->seqStore.offCodeFreq + (1<hbSize = 0; zc->stage = 0; diff --git a/lib/zstd_internal.h b/lib/zstd_internal.h index f2af062f..eebcc0d7 100644 --- a/lib/zstd_internal.h +++ b/lib/zstd_internal.h @@ -87,6 +87,7 @@ static const size_t ZSTD_frameHeaderSize_min = 5; #define MLbits 7 #define LLbits 6 #define Offbits 5 +#define MaxLit ((1<