mirror of
https://github.com/lz4/lz4.git
synced 2024-11-24 18:33:50 +08:00
Merge pull request #494 from felixhandte/kill-goto
Return to Allowing Early Returns in LZ4_compress_generic()
This commit is contained in:
commit
c7b17be938
38
lib/lz4.c
38
lib/lz4.c
@ -626,8 +626,6 @@ LZ4_FORCE_INLINE int LZ4_compress_generic(
|
||||
BYTE* op = (BYTE*) dest;
|
||||
BYTE* const olimit = op + maxOutputSize;
|
||||
|
||||
ptrdiff_t retval = 0;
|
||||
|
||||
U32 forwardH;
|
||||
|
||||
/* Init conditions */
|
||||
@ -637,6 +635,19 @@ LZ4_FORCE_INLINE int LZ4_compress_generic(
|
||||
dictLowLimit = dictionary ? dictionary : lowLimit;
|
||||
|
||||
if ((tableType == byU16) && (inputSize>=LZ4_64Klimit)) return 0; /* Size too large (not within 64K limit) */
|
||||
|
||||
/* Update context state */
|
||||
if (dictDirective == usingDictCtx) {
|
||||
/* Subsequent linked blocks can't use the dictionary. */
|
||||
/* Instead, they use the block we just compressed. */
|
||||
cctx->dictCtx = NULL;
|
||||
cctx->dictSize = (U32)inputSize;
|
||||
} else {
|
||||
cctx->dictSize += (U32)inputSize;
|
||||
}
|
||||
cctx->currentOffset += (U32)inputSize;
|
||||
cctx->tableType = tableType;
|
||||
|
||||
if (inputSize<LZ4_minLength) goto _last_literals; /* Input too small, no compression (all literals) */
|
||||
|
||||
/* First Byte */
|
||||
@ -697,7 +708,7 @@ LZ4_FORCE_INLINE int LZ4_compress_generic(
|
||||
token = op++;
|
||||
if ((outputLimited) && /* Check output buffer overflow */
|
||||
(unlikely(op + litLength + (2 + 1 + LASTLITERALS) + (litLength/255) > olimit)))
|
||||
goto _clean_up;
|
||||
return 0;
|
||||
if (litLength >= RUN_MASK) {
|
||||
int len = (int)litLength-RUN_MASK;
|
||||
*token = (RUN_MASK<<ML_BITS);
|
||||
@ -737,7 +748,7 @@ _next_match:
|
||||
|
||||
if ( outputLimited && /* Check output buffer overflow */
|
||||
(unlikely(op + (1 + LASTLITERALS) + (matchCode>>8) > olimit)) )
|
||||
goto _clean_up;
|
||||
return 0;
|
||||
if (matchCode >= ML_MASK) {
|
||||
*token += ML_MASK;
|
||||
matchCode -= ML_MASK;
|
||||
@ -796,7 +807,7 @@ _last_literals:
|
||||
{ size_t const lastRun = (size_t)(iend - anchor);
|
||||
if ( (outputLimited) && /* Check output buffer overflow */
|
||||
((op - (BYTE*)dest) + lastRun + 1 + ((lastRun+255-RUN_MASK)/255) > (U32)maxOutputSize) )
|
||||
goto _clean_up;
|
||||
return 0;
|
||||
if (lastRun >= RUN_MASK) {
|
||||
size_t accumulator = lastRun - RUN_MASK;
|
||||
*op++ = RUN_MASK << ML_BITS;
|
||||
@ -809,22 +820,7 @@ _last_literals:
|
||||
op += lastRun;
|
||||
}
|
||||
|
||||
retval = (((char*)op)-dest);
|
||||
|
||||
_clean_up:
|
||||
if (dictDirective == usingDictCtx) {
|
||||
/* Subsequent linked blocks can't use the dictionary. */
|
||||
/* Instead, they use the block we just compressed. */
|
||||
cctx->dictCtx = NULL;
|
||||
cctx->dictSize = (U32)inputSize;
|
||||
} else {
|
||||
cctx->dictSize += (U32)inputSize;
|
||||
}
|
||||
cctx->currentOffset += (U32)inputSize;
|
||||
cctx->tableType = tableType;
|
||||
|
||||
/* End */
|
||||
return (int)retval;
|
||||
return (int)(((char*)op) - dest);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user