tableU16[s] = (U16)(tableSize + s);
/* Build Symbol Transformation Table */
- for (s=0; s<=maxSymbolValue; s++) {
- symbolTT[s].deltaNbBits = (nbBits << 16) - (1 << nbBits);
- symbolTT[s].deltaFindState = s-1;
+ {
+ const U32 deltaNbBits = (nbBits << 16) - (1 << nbBits);
+ for (s=0; s<=maxSymbolValue; s++) {
+ symbolTT[s].deltaNbBits = deltaNbBits;
+ symbolTT[s].deltaFindState = s-1;
+ }
}
return 0;
}
/* Sequences Header */
- if ((oend-op) < MIN_SEQUENCES_SIZE)
- return ERROR(dstSize_tooSmall);
- MEM_writeLE16(op, (U16)nbSeq); op+=2;
-
+ if ((oend-op) < MIN_SEQUENCES_SIZE) return ERROR(dstSize_tooSmall);
+ if (nbSeq < 128) *op++ = (BYTE)nbSeq;
+ else {
+ op[0] = (nbSeq>>8) + 128; op[1] = (BYTE)nbSeq; op+=2;
+ }
if (nbSeq==0) goto _check_compressibility;
/* dumps : contains rests of large lengths */
/* init */
ZSTD_resetSeqStore(seqStorePtr);
- if (ip < lowest+4) {
- hashTable[ZSTD_hashPtr(lowest+1, hBits, mls)] = lowIndex+1;
- hashTable[ZSTD_hashPtr(lowest+2, hBits, mls)] = lowIndex+2;
- hashTable[ZSTD_hashPtr(lowest+3, hBits, mls)] = lowIndex+3;
- ip = lowest+4;
- }
+ if (ip < lowest+REPCODE_STARTVALUE) ip = lowest+REPCODE_STARTVALUE;
/* Main Search Loop */
while (ip < ilimit) { /* < instead of <=, because repcode check at (ip+1) */
/* init */
ZSTD_resetSeqStore(seqStorePtr);
- /* skip first 4 positions to avoid read overflow during repcode match check */
+ /* skip first position to avoid read overflow during repcode match check */
hashTable[ZSTD_hashPtr(ip+0, hBits, mls)] = (U32)(ip-base+0);
- hashTable[ZSTD_hashPtr(ip+1, hBits, mls)] = (U32)(ip-base+1);
- hashTable[ZSTD_hashPtr(ip+2, hBits, mls)] = (U32)(ip-base+2);
- hashTable[ZSTD_hashPtr(ip+3, hBits, mls)] = (U32)(ip-base+3);
- ip += 4;
+ ip += REPCODE_STARTVALUE;
/* Main Search Loop */
while (ip < ilimit) { /* < instead of <=, because (ip+1) */
static size_t ZSTD_decodeFrameHeader_Part1(ZSTD_DCtx* zc, const void* src, size_t srcSize)
{
U32 magicNumber;
- if (srcSize != ZSTD_frameHeaderSize_min) return ERROR(srcSize_wrong);
+ if (srcSize != ZSTD_frameHeaderSize_min)
+ return ERROR(srcSize_wrong);
magicNumber = MEM_readLE32(src);
if (magicNumber != ZSTD_MAGICNUMBER) return ERROR(prefix_unknown);
zc->headerSize = ZSTD_frameHeaderSize_min;
static size_t ZSTD_decodeFrameHeader_Part2(ZSTD_DCtx* zc, const void* src, size_t srcSize)
{
size_t result;
- if (srcSize != zc->headerSize) return ERROR(srcSize_wrong);
+ if (srcSize != zc->headerSize)
+ return ERROR(srcSize_wrong);
result = ZSTD_getFrameParams(&(zc->params), src, srcSize);
if ((MEM_32bits()) && (zc->params.windowLog > 25)) return ERROR(frameParameter_unsupportedBy32bitsImplementation);
return result;
BYTE headerFlags;
U32 cSize;
- if (srcSize < 3) return ERROR(srcSize_wrong);
+ if (srcSize < 3)
+ return ERROR(srcSize_wrong);
headerFlags = *in;
cSize = in[2] + (in[1]<<8) + ((in[0] & 7)<<16);
}
-/** ZSTD_decodeLiteralsBlock
+/*! ZSTD_decodeLiteralsBlock
@return : nb of bytes read from src (< srcSize ) */
size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
const void* src, size_t srcSize) /* note : srcSize < BLOCKSIZE */
break;
}
- if (lhSize+litSize+WILDCOPY_OVERLENGTH > srcSize) /* risk reading beyond src buffer with wildcopy */
- {
+ if (lhSize+litSize+WILDCOPY_OVERLENGTH > srcSize) { /* risk reading beyond src buffer with wildcopy */
if (litSize > srcSize-lhSize) return ERROR(corruption_detected);
memcpy(dctx->litBuffer, istart+lhSize, litSize);
dctx->litPtr = dctx->litBuffer;
size_t dumpsLength;
/* check */
- if (srcSize < MIN_SEQUENCES_SIZE) return ERROR(srcSize_wrong);
+ if (srcSize < MIN_SEQUENCES_SIZE)
+ return ERROR(srcSize_wrong);
/* SeqHead */
- *nbSeq = MEM_readLE16(ip); ip+=2;
- if (*nbSeq==0) return 2;
+ *nbSeq = *ip++;
+ if (*nbSeq==0) return 1;
+ if (*nbSeq >= 128)
+ *nbSeq = ((nbSeq[0]-128)<<8) + *ip++;
LLtype = *ip >> 6;
Offtype = (*ip >> 4) & 3;
seqState_t seqState;
memset(&sequence, 0, sizeof(sequence));
- sequence.offset = 4;
+ sequence.offset = REPCODE_STARTVALUE;
seqState.dumps = dumps;
seqState.dumpsEnd = dumps + dumpsLength;
- seqState.prevOffset = 4;
+ seqState.prevOffset = REPCODE_STARTVALUE;
errorCode = BIT_initDStream(&(seqState.DStream), ip, iend-ip);
if (ERR_isError(errorCode)) return ERROR(corruption_detected);
FSE_initDState(&(seqState.stateLL), &(seqState.DStream), DTableLL);