mirror of
				https://github.com/facebook/zstd.git
				synced 2025-10-31 08:37:43 +02:00 
			
		
		
		
	unified error codes for legacy decoders
This commit is contained in:
		| @@ -13,6 +13,7 @@ | ||||
| ******************************************/ | ||||
| #include <stddef.h>    /* size_t, ptrdiff_t */ | ||||
| #include "zstd_v01.h" | ||||
| #include "error_private.h" | ||||
|  | ||||
|  | ||||
| /****************************************** | ||||
| @@ -1175,57 +1176,6 @@ static size_t HUF_decompress (void* dst, size_t maxDstSize, const void* cSrc, si | ||||
|  | ||||
| #endif   /* FSE_COMMONDEFS_ONLY */ | ||||
|  | ||||
| /* | ||||
|     zstd - standard compression library | ||||
|     Header File for static linking only | ||||
|     Copyright (C) 2014-2015, Yann Collet. | ||||
|  | ||||
|     BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) | ||||
|  | ||||
|     Redistribution and use in source and binary forms, with or without | ||||
|     modification, are permitted provided that the following conditions are | ||||
|     met: | ||||
|     * Redistributions of source code must retain the above copyright | ||||
|     notice, this list of conditions and the following disclaimer. | ||||
|     * Redistributions in binary form must reproduce the above | ||||
|     copyright notice, this list of conditions and the following disclaimer | ||||
|     in the documentation and/or other materials provided with the | ||||
|     distribution. | ||||
|     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|     "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
|     A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|     OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
|     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
|     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
|     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
|     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
|     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
|     You can contact the author at : | ||||
|     - zstd source repository : https://github.com/Cyan4973/zstd | ||||
|     - ztsd public forum : https://groups.google.com/forum/#!forum/lz4c | ||||
| */ | ||||
|  | ||||
| /* The objects defined into this file should be considered experimental. | ||||
|  * They are not labelled stable, as their prototype may change in the future. | ||||
|  * You can use them for tests, provide feedback, or if you can endure risk of future changes. | ||||
|  */ | ||||
|  | ||||
| /************************************** | ||||
| *  Error management | ||||
| **************************************/ | ||||
| #define ZSTD_LIST_ERRORS(ITEM) \ | ||||
|         ITEM(ZSTD_OK_NoError) ITEM(ZSTD_ERROR_GENERIC) \ | ||||
|         ITEM(ZSTD_ERROR_MagicNumber) \ | ||||
|         ITEM(ZSTD_ERROR_SrcSize) ITEM(ZSTD_ERROR_maxDstSize_tooSmall) \ | ||||
|         ITEM(ZSTD_ERROR_corruption) \ | ||||
|         ITEM(ZSTD_ERROR_maxCode) | ||||
|  | ||||
| #define ZSTD_GENERATE_ENUM(ENUM) ENUM, | ||||
| typedef enum { ZSTD_LIST_ERRORS(ZSTD_GENERATE_ENUM) } ZSTD_errorCodes;   /* exposed list of errors; static linking only */ | ||||
|  | ||||
| /* | ||||
|     zstd - standard compression library | ||||
|     Copyright (C) 2014-2015, Yann Collet. | ||||
| @@ -1487,11 +1437,8 @@ typedef struct ZSTD_Cctx_s | ||||
| /************************************** | ||||
| *  Error Management | ||||
| **************************************/ | ||||
| /* tells if a return value is an error code */ | ||||
| static unsigned ZSTD_isError(size_t code) { return (code > (size_t)(-ZSTD_ERROR_maxCode)); } | ||||
|  | ||||
| /* published entry point */ | ||||
| unsigned ZSTDv01_isError(size_t code) { return ZSTD_isError(code); } | ||||
| unsigned ZSTDv01_isError(size_t code) { return ERR_isError(code); } | ||||
|  | ||||
|  | ||||
| /************************************** | ||||
| @@ -1512,7 +1459,7 @@ static size_t ZSTD_getcBlockSize(const void* src, size_t srcSize, blockPropertie | ||||
|     BYTE headerFlags; | ||||
|     U32 cSize; | ||||
|  | ||||
|     if (srcSize < 3) return (size_t)-ZSTD_ERROR_SrcSize; | ||||
|     if (srcSize < 3) return ERROR(srcSize_wrong); | ||||
|  | ||||
|     headerFlags = *in; | ||||
|     cSize = in[2] + (in[1]<<8) + ((in[0] & 7)<<16); | ||||
| @@ -1528,7 +1475,7 @@ static size_t ZSTD_getcBlockSize(const void* src, size_t srcSize, blockPropertie | ||||
|  | ||||
| static size_t ZSTD_copyUncompressedBlock(void* dst, size_t maxDstSize, const void* src, size_t srcSize) | ||||
| { | ||||
|     if (srcSize > maxDstSize) return (size_t)-ZSTD_ERROR_maxDstSize_tooSmall; | ||||
|     if (srcSize > maxDstSize) return ERROR(dstSize_tooSmall); | ||||
|     memcpy(dst, src, srcSize); | ||||
|     return srcSize; | ||||
| } | ||||
| @@ -1545,16 +1492,16 @@ static size_t ZSTD_decompressLiterals(void* ctx, | ||||
|     size_t litSize; | ||||
|  | ||||
|     /* check : minimum 2, for litSize, +1, for content */ | ||||
|     if (srcSize <= 3) return (size_t)-ZSTD_ERROR_corruption; | ||||
|     if (srcSize <= 3) return ERROR(corruption_detected); | ||||
|  | ||||
|     litSize = ip[1] + (ip[0]<<8); | ||||
|     litSize += ((ip[-3] >> 3) & 7) << 16;   // mmmmh.... | ||||
|     op = oend - litSize; | ||||
|  | ||||
|     (void)ctx; | ||||
|     if (litSize > maxDstSize) return (size_t)-ZSTD_ERROR_maxDstSize_tooSmall; | ||||
|     if (litSize > maxDstSize) return ERROR(dstSize_tooSmall); | ||||
|     errorCode = HUF_decompress(op, litSize, ip+2, srcSize-2); | ||||
|     if (FSE_isError(errorCode)) return (size_t)-ZSTD_ERROR_GENERIC; | ||||
|     if (FSE_isError(errorCode)) return ERROR(GENERIC); | ||||
|     return litSize; | ||||
| } | ||||
|  | ||||
| @@ -1571,8 +1518,8 @@ static size_t ZSTD_decodeLiteralsBlock(void* ctx, | ||||
|     blockProperties_t litbp; | ||||
|  | ||||
|     size_t litcSize = ZSTD_getcBlockSize(src, srcSize, &litbp); | ||||
|     if (ZSTD_isError(litcSize)) return litcSize; | ||||
|     if (litcSize > srcSize - ZSTD_blockHeaderSize) return (size_t)-ZSTD_ERROR_SrcSize; | ||||
|     if (ZSTDv01_isError(litcSize)) return litcSize; | ||||
|     if (litcSize > srcSize - ZSTD_blockHeaderSize) return ERROR(srcSize_wrong); | ||||
|     ip += ZSTD_blockHeaderSize; | ||||
|  | ||||
|     switch(litbp.blockType) | ||||
| @@ -1585,7 +1532,7 @@ static size_t ZSTD_decodeLiteralsBlock(void* ctx, | ||||
|     case bt_rle: | ||||
|         { | ||||
|             size_t rleSize = litbp.origSize; | ||||
|             if (rleSize>maxDstSize) return (size_t)-ZSTD_ERROR_maxDstSize_tooSmall; | ||||
|             if (rleSize>maxDstSize) return ERROR(dstSize_tooSmall); | ||||
|             memset(oend - rleSize, *ip, rleSize); | ||||
|             *litStart = oend - rleSize; | ||||
|             *litSize = rleSize; | ||||
| @@ -1595,7 +1542,7 @@ static size_t ZSTD_decodeLiteralsBlock(void* ctx, | ||||
|     case bt_compressed: | ||||
|         { | ||||
|             size_t decodedLitSize = ZSTD_decompressLiterals(ctx, dst, maxDstSize, ip, litcSize); | ||||
|             if (ZSTD_isError(decodedLitSize)) return decodedLitSize; | ||||
|             if (ZSTDv01_isError(decodedLitSize)) return decodedLitSize; | ||||
|             *litStart = oend - decodedLitSize; | ||||
|             *litSize = decodedLitSize; | ||||
|             ip += litcSize; | ||||
| @@ -1603,7 +1550,7 @@ static size_t ZSTD_decodeLiteralsBlock(void* ctx, | ||||
|         } | ||||
|     case bt_end: | ||||
|     default: | ||||
|         return (size_t)-ZSTD_ERROR_GENERIC; | ||||
|         return ERROR(GENERIC); | ||||
|     } | ||||
|  | ||||
|     return ip-istart; | ||||
| @@ -1622,7 +1569,7 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d | ||||
|     size_t dumpsLength; | ||||
|  | ||||
|     /* check */ | ||||
|     if (srcSize < 5) return (size_t)-ZSTD_ERROR_SrcSize; | ||||
|     if (srcSize < 5) return ERROR(srcSize_wrong); | ||||
|  | ||||
|     /* SeqHead */ | ||||
|     *nbSeq = ZSTD_readLE16(ip); ip+=2; | ||||
| @@ -1646,7 +1593,7 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d | ||||
|     *dumpsLengthPtr = dumpsLength; | ||||
|  | ||||
|     /* check */ | ||||
|     if (ip > iend-3) return (size_t)-ZSTD_ERROR_SrcSize; /* min : all 3 are "raw", hence no header, but at least xxLog bits per type */ | ||||
|     if (ip > iend-3) return ERROR(srcSize_wrong); /* min : all 3 are "raw", hence no header, but at least xxLog bits per type */ | ||||
|  | ||||
|     /* sequences */ | ||||
|     { | ||||
| @@ -1665,8 +1612,8 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d | ||||
|         default : | ||||
|             {   U32 max = MaxLL; | ||||
|                 headerSize = FSE_readNCount(norm, &max, &LLlog, ip, iend-ip); | ||||
|                 if (FSE_isError(headerSize)) return (size_t)-ZSTD_ERROR_GENERIC; | ||||
|                 if (LLlog > LLFSELog) return (size_t)-ZSTD_ERROR_corruption; | ||||
|                 if (FSE_isError(headerSize)) return ERROR(GENERIC); | ||||
|                 if (LLlog > LLFSELog) return ERROR(corruption_detected); | ||||
|                 ip += headerSize; | ||||
|                 FSE_buildDTable(DTableLL, norm, max, LLlog); | ||||
|         }   } | ||||
| @@ -1675,7 +1622,7 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d | ||||
|         { | ||||
|         case bt_rle : | ||||
|             Offlog = 0; | ||||
|             if (ip > iend-2) return (size_t)-ZSTD_ERROR_SrcSize; /* min : "raw", hence no header, but at least xxLog bits */ | ||||
|             if (ip > iend-2) return ERROR(srcSize_wrong); /* min : "raw", hence no header, but at least xxLog bits */ | ||||
|             FSE_buildDTable_rle(DTableOffb, *ip++); break; | ||||
|         case bt_raw : | ||||
|             Offlog = Offbits; | ||||
| @@ -1683,8 +1630,8 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d | ||||
|         default : | ||||
|             {   U32 max = MaxOff; | ||||
|                 headerSize = FSE_readNCount(norm, &max, &Offlog, ip, iend-ip); | ||||
|                 if (FSE_isError(headerSize)) return (size_t)-ZSTD_ERROR_GENERIC; | ||||
|                 if (Offlog > OffFSELog) return (size_t)-ZSTD_ERROR_corruption; | ||||
|                 if (FSE_isError(headerSize)) return ERROR(GENERIC); | ||||
|                 if (Offlog > OffFSELog) return ERROR(corruption_detected); | ||||
|                 ip += headerSize; | ||||
|                 FSE_buildDTable(DTableOffb, norm, max, Offlog); | ||||
|         }   } | ||||
| @@ -1693,7 +1640,7 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d | ||||
|         { | ||||
|         case bt_rle : | ||||
|             MLlog = 0; | ||||
|             if (ip > iend-2) return (size_t)-ZSTD_ERROR_SrcSize; /* min : "raw", hence no header, but at least xxLog bits */ | ||||
|             if (ip > iend-2) return ERROR(srcSize_wrong); /* min : "raw", hence no header, but at least xxLog bits */ | ||||
|             FSE_buildDTable_rle(DTableML, *ip++); break; | ||||
|         case bt_raw : | ||||
|             MLlog = MLbits; | ||||
| @@ -1701,8 +1648,8 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d | ||||
|         default : | ||||
|             {   U32 max = MaxML; | ||||
|                 headerSize = FSE_readNCount(norm, &max, &MLlog, ip, iend-ip); | ||||
|                 if (FSE_isError(headerSize)) return (size_t)-ZSTD_ERROR_GENERIC; | ||||
|                 if (MLlog > MLFSELog) return (size_t)-ZSTD_ERROR_corruption; | ||||
|                 if (FSE_isError(headerSize)) return ERROR(GENERIC); | ||||
|                 if (MLlog > MLFSELog) return ERROR(corruption_detected); | ||||
|                 ip += headerSize; | ||||
|                 FSE_buildDTable(DTableML, norm, max, MLlog); | ||||
|     }   }   } | ||||
| @@ -1805,9 +1752,9 @@ static size_t ZSTD_execSequence(BYTE* op, | ||||
|     const BYTE* const litEnd = *litPtr + litLength; | ||||
|  | ||||
|     /* check */ | ||||
|     if (endMatch > oend) return (size_t)-ZSTD_ERROR_maxDstSize_tooSmall;   /* overwrite beyond dst buffer */ | ||||
|     if (litEnd > litLimit) return (size_t)-ZSTD_ERROR_corruption; | ||||
|     if (sequence.matchLength > (size_t)(*litPtr-op))  return (size_t)-ZSTD_ERROR_maxDstSize_tooSmall;    /* overwrite literal segment */ | ||||
|     if (endMatch > oend) return ERROR(dstSize_tooSmall);   /* overwrite beyond dst buffer */ | ||||
|     if (litEnd > litLimit) return ERROR(corruption_detected); | ||||
|     if (sequence.matchLength > (size_t)(*litPtr-op))  return ERROR(dstSize_tooSmall);    /* overwrite literal segment */ | ||||
|  | ||||
|     /* copy Literals */ | ||||
|     if (((size_t)(*litPtr - op) < 8) || ((size_t)(oend-litEnd) < 8) || (op+litLength > oend-8)) | ||||
| @@ -1818,7 +1765,7 @@ static size_t ZSTD_execSequence(BYTE* op, | ||||
|     *litPtr = litEnd;   /* update for next sequence */ | ||||
|  | ||||
|     /* check : last match must be at a minimum distance of 8 from end of dest buffer */ | ||||
|     if (oend-op < 8) return (size_t)-ZSTD_ERROR_maxDstSize_tooSmall; | ||||
|     if (oend-op < 8) return ERROR(dstSize_tooSmall); | ||||
|  | ||||
|     /* copy Match */ | ||||
|     { | ||||
| @@ -1828,8 +1775,8 @@ static size_t ZSTD_execSequence(BYTE* op, | ||||
|         U64 saved[2]; | ||||
|  | ||||
|         /* check */ | ||||
|         if (match < base) return (size_t)-ZSTD_ERROR_corruption; | ||||
|         if (sequence.offset > (size_t)base) return (size_t)-ZSTD_ERROR_corruption; | ||||
|         if (match < base) return ERROR(corruption_detected); | ||||
|         if (sequence.offset > (size_t)base) return ERROR(corruption_detected); | ||||
|  | ||||
|         /* save beginning of literal sequence, in case of write overlap */ | ||||
|         if (overlapRisk) | ||||
| @@ -1910,7 +1857,7 @@ static size_t ZSTD_decompressSequences( | ||||
|     errorCode = ZSTD_decodeSeqHeaders(&nbSeq, &dumps, &dumpsLength, | ||||
|                                       DTableLL, DTableML, DTableOffb, | ||||
|                                       ip, iend-ip); | ||||
|     if (ZSTD_isError(errorCode)) return errorCode; | ||||
|     if (ZSTDv01_isError(errorCode)) return errorCode; | ||||
|     ip += errorCode; | ||||
|  | ||||
|     /* Regen sequences */ | ||||
| @@ -1923,7 +1870,7 @@ static size_t ZSTD_decompressSequences( | ||||
|         seqState.dumpsEnd = dumps + dumpsLength; | ||||
|         seqState.prevOffset = 1; | ||||
|         errorCode = FSE_initDStream(&(seqState.DStream), ip, iend-ip); | ||||
|         if (FSE_isError(errorCode)) return (size_t)-ZSTD_ERROR_corruption; | ||||
|         if (FSE_isError(errorCode)) return ERROR(corruption_detected); | ||||
|         FSE_initDState(&(seqState.stateLL), &(seqState.DStream), DTableLL); | ||||
|         FSE_initDState(&(seqState.stateOffb), &(seqState.DStream), DTableOffb); | ||||
|         FSE_initDState(&(seqState.stateML), &(seqState.DStream), DTableML); | ||||
| @@ -1934,18 +1881,18 @@ static size_t ZSTD_decompressSequences( | ||||
|             nbSeq--; | ||||
|             ZSTD_decodeSequence(&sequence, &seqState); | ||||
|             oneSeqSize = ZSTD_execSequence(op, sequence, &litPtr, litEnd, base, oend); | ||||
|             if (ZSTD_isError(oneSeqSize)) return oneSeqSize; | ||||
|             if (ZSTDv01_isError(oneSeqSize)) return oneSeqSize; | ||||
|             op += oneSeqSize; | ||||
|         } | ||||
|  | ||||
|         /* check if reached exact end */ | ||||
|         if ( !FSE_endOfDStream(&(seqState.DStream)) ) return (size_t)-ZSTD_ERROR_corruption;   /* requested too much : data is corrupted */ | ||||
|         if (nbSeq<0) return (size_t)-ZSTD_ERROR_corruption;   /* requested too many sequences : data is corrupted */ | ||||
|         if ( !FSE_endOfDStream(&(seqState.DStream)) ) return ERROR(corruption_detected);   /* requested too much : data is corrupted */ | ||||
|         if (nbSeq<0) return ERROR(corruption_detected);   /* requested too many sequences : data is corrupted */ | ||||
|  | ||||
|         /* last literal segment */ | ||||
|         { | ||||
|             size_t lastLLSize = litEnd - litPtr; | ||||
|             if (op+lastLLSize > oend) return (size_t)-ZSTD_ERROR_maxDstSize_tooSmall; | ||||
|             if (op+lastLLSize > oend) return ERROR(dstSize_tooSmall); | ||||
|             if (op != litPtr) memmove(op, litPtr, lastLLSize); | ||||
|             op += lastLLSize; | ||||
|         } | ||||
| @@ -1968,7 +1915,7 @@ static size_t ZSTD_decompressBlock( | ||||
|  | ||||
|     /* Decode literals sub-block */ | ||||
|     errorCode = ZSTD_decodeLiteralsBlock(ctx, dst, maxDstSize, &litPtr, &litSize, src, srcSize); | ||||
|     if (ZSTD_isError(errorCode)) return errorCode; | ||||
|     if (ZSTDv01_isError(errorCode)) return errorCode; | ||||
|     ip += errorCode; | ||||
|     srcSize -= errorCode; | ||||
|  | ||||
| @@ -1989,20 +1936,20 @@ size_t ZSTDv01_decompressDCtx(void* ctx, void* dst, size_t maxDstSize, const voi | ||||
|     blockProperties_t blockProperties; | ||||
|  | ||||
|     /* Frame Header */ | ||||
|     if (srcSize < ZSTD_frameHeaderSize+ZSTD_blockHeaderSize) return (size_t)-ZSTD_ERROR_SrcSize; | ||||
|     if (srcSize < ZSTD_frameHeaderSize+ZSTD_blockHeaderSize) return ERROR(srcSize_wrong); | ||||
|     magicNumber = ZSTD_readBE32(src); | ||||
|     if (magicNumber != ZSTD_magicNumber) return (size_t)-ZSTD_ERROR_MagicNumber; | ||||
|     if (magicNumber != ZSTD_magicNumber) return ERROR(prefix_unknown); | ||||
|     ip += ZSTD_frameHeaderSize; remainingSize -= ZSTD_frameHeaderSize; | ||||
|  | ||||
|     /* Loop on each block */ | ||||
|     while (1) | ||||
|     { | ||||
|         size_t blockSize = ZSTD_getcBlockSize(ip, iend-ip, &blockProperties); | ||||
|         if (ZSTD_isError(blockSize)) return blockSize; | ||||
|         if (ZSTDv01_isError(blockSize)) return blockSize; | ||||
|  | ||||
|         ip += ZSTD_blockHeaderSize; | ||||
|         remainingSize -= ZSTD_blockHeaderSize; | ||||
|         if (blockSize > remainingSize) return (size_t)-ZSTD_ERROR_SrcSize; | ||||
|         if (blockSize > remainingSize) return ERROR(srcSize_wrong); | ||||
|  | ||||
|         switch(blockProperties.blockType) | ||||
|         { | ||||
| @@ -2013,18 +1960,18 @@ size_t ZSTDv01_decompressDCtx(void* ctx, void* dst, size_t maxDstSize, const voi | ||||
|             errorCode = ZSTD_copyUncompressedBlock(op, oend-op, ip, blockSize); | ||||
|             break; | ||||
|         case bt_rle : | ||||
|             return (size_t)-ZSTD_ERROR_GENERIC;   /* not yet supported */ | ||||
|             return ERROR(GENERIC);   /* not yet supported */ | ||||
|             break; | ||||
|         case bt_end : | ||||
|             /* end of frame */ | ||||
|             if (remainingSize) return (size_t)-ZSTD_ERROR_SrcSize; | ||||
|             if (remainingSize) return ERROR(srcSize_wrong); | ||||
|             break; | ||||
|         default: | ||||
|             return (size_t)-ZSTD_ERROR_GENERIC; | ||||
|             return ERROR(GENERIC); | ||||
|         } | ||||
|         if (blockSize == 0) break;   /* bt_end */ | ||||
|  | ||||
|         if (ZSTD_isError(errorCode)) return errorCode; | ||||
|         if (ZSTDv01_isError(errorCode)) return errorCode; | ||||
|         op += errorCode; | ||||
|         ip += blockSize; | ||||
|         remainingSize -= blockSize; | ||||
| @@ -2078,7 +2025,7 @@ size_t ZSTDv01_decompressContinue(ZSTDv01_Dctx* dctx, void* dst, size_t maxDstSi | ||||
|     dctx_t* ctx = (dctx_t*)dctx; | ||||
|  | ||||
|     /* Sanity check */ | ||||
|     if (srcSize != ctx->expected) return (size_t)-ZSTD_ERROR_SrcSize; | ||||
|     if (srcSize != ctx->expected) return ERROR(srcSize_wrong); | ||||
|     if (dst != ctx->previousDstEnd)  /* not contiguous */ | ||||
|         ctx->base = dst; | ||||
|  | ||||
| @@ -2087,7 +2034,7 @@ size_t ZSTDv01_decompressContinue(ZSTDv01_Dctx* dctx, void* dst, size_t maxDstSi | ||||
|     { | ||||
|         /* Check frame magic header */ | ||||
|         U32 magicNumber = ZSTD_readBE32(src); | ||||
|         if (magicNumber != ZSTD_magicNumber) return (size_t)-ZSTD_ERROR_MagicNumber; | ||||
|         if (magicNumber != ZSTD_magicNumber) return ERROR(prefix_unknown); | ||||
|         ctx->phase = 1; | ||||
|         ctx->expected = ZSTD_blockHeaderSize; | ||||
|         return 0; | ||||
| @@ -2098,7 +2045,7 @@ size_t ZSTDv01_decompressContinue(ZSTDv01_Dctx* dctx, void* dst, size_t maxDstSi | ||||
|     { | ||||
|         blockProperties_t bp; | ||||
|         size_t blockSize = ZSTD_getcBlockSize(src, ZSTD_blockHeaderSize, &bp); | ||||
|         if (ZSTD_isError(blockSize)) return blockSize; | ||||
|         if (ZSTDv01_isError(blockSize)) return blockSize; | ||||
|         if (bp.blockType == bt_end) | ||||
|         { | ||||
|             ctx->expected = 0; | ||||
| @@ -2126,13 +2073,13 @@ size_t ZSTDv01_decompressContinue(ZSTDv01_Dctx* dctx, void* dst, size_t maxDstSi | ||||
|             rSize = ZSTD_copyUncompressedBlock(dst, maxDstSize, src, srcSize); | ||||
|             break; | ||||
|         case bt_rle : | ||||
|             return (size_t)-ZSTD_ERROR_GENERIC;   /* not yet handled */ | ||||
|             return ERROR(GENERIC);   /* not yet handled */ | ||||
|             break; | ||||
|         case bt_end :   /* should never happen (filtered at phase 1) */ | ||||
|             rSize = 0; | ||||
|             break; | ||||
|         default: | ||||
|             return (size_t)-ZSTD_ERROR_GENERIC; | ||||
|             return ERROR(GENERIC); | ||||
|         } | ||||
|         ctx->phase = 1; | ||||
|         ctx->expected = ZSTD_blockHeaderSize; | ||||
|   | ||||
| @@ -7,63 +7,11 @@ | ||||
|  * of patent rights can be found in the PATENTS file in the same directory. | ||||
|  */ | ||||
|  | ||||
| #ifndef ERROR_H_MODULE | ||||
| #define ERROR_H_MODULE | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| #include <stddef.h>    /* size_t, ptrdiff_t */ | ||||
| #include "zstd_v02.h" | ||||
| #include "error_private.h" | ||||
|  | ||||
| /****************************************** | ||||
| *  Compiler-specific | ||||
| ******************************************/ | ||||
| #if defined(_MSC_VER)   /* Visual Studio */ | ||||
| #   include <stdlib.h>  /* _byteswap_ulong */ | ||||
| #   include <intrin.h>  /* _byteswap_* */ | ||||
| #endif | ||||
| #if defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) | ||||
| #  define ERR_STATIC static inline | ||||
| #elif defined(_MSC_VER) | ||||
| #  define ERR_STATIC static __inline | ||||
| #elif defined(__GNUC__) | ||||
| #  define ERR_STATIC static __attribute__((unused)) | ||||
| #else | ||||
| #  define ERR_STATIC static  /* this version may generate warnings for unused static functions; disable the relevant warning */ | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /****************************************** | ||||
| *  Error Management | ||||
| ******************************************/ | ||||
| #define PREFIX(name) ZSTD_error_##name | ||||
|  | ||||
| #define ERROR(name) (size_t)-PREFIX(name) | ||||
|  | ||||
| #define ERROR_LIST(ITEM) \ | ||||
|         ITEM(PREFIX(No_Error)) ITEM(PREFIX(GENERIC)) \ | ||||
|         ITEM(PREFIX(memory_allocation)) \ | ||||
|         ITEM(PREFIX(dstSize_tooSmall)) ITEM(PREFIX(srcSize_wrong)) \ | ||||
|         ITEM(PREFIX(prefix_unknown)) ITEM(PREFIX(corruption_detected)) \ | ||||
|         ITEM(PREFIX(tableLog_tooLarge)) ITEM(PREFIX(maxSymbolValue_tooLarge)) ITEM(PREFIX(maxSymbolValue_tooSmall)) \ | ||||
|         ITEM(PREFIX(maxCode)) | ||||
|  | ||||
| #define ERROR_GENERATE_ENUM(ENUM) ENUM, | ||||
| typedef enum { ERROR_LIST(ERROR_GENERATE_ENUM) } ERR_codes;  /* enum is exposed, to detect & handle specific errors; compare function result to -enum value */ | ||||
|  | ||||
| #define ERROR_CONVERTTOSTRING(STRING) #STRING, | ||||
| #define ERROR_GENERATE_STRING(EXPR) ERROR_CONVERTTOSTRING(EXPR) | ||||
|  | ||||
| ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); } | ||||
|  | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif /* ERROR_H_MODULE */ | ||||
|  | ||||
|  | ||||
| /* ****************************************************************** | ||||
|   | ||||
| @@ -7,63 +7,11 @@ | ||||
|  * of patent rights can be found in the PATENTS file in the same directory. | ||||
|  */ | ||||
|  | ||||
| #ifndef ERROR_H_MODULE | ||||
| #define ERROR_H_MODULE | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| #include <stddef.h>    /* size_t, ptrdiff_t */ | ||||
| #include "zstd_v03.h" | ||||
| #include "error_private.h" | ||||
|  | ||||
| /****************************************** | ||||
| *  Compiler-specific | ||||
| ******************************************/ | ||||
| #if defined(_MSC_VER)   /* Visual Studio */ | ||||
| #   include <stdlib.h>  /* _byteswap_ulong */ | ||||
| #   include <intrin.h>  /* _byteswap_* */ | ||||
| #endif | ||||
| #if defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) | ||||
| #  define ERR_STATIC static inline | ||||
| #elif defined(_MSC_VER) | ||||
| #  define ERR_STATIC static __inline | ||||
| #elif defined(__GNUC__) | ||||
| #  define ERR_STATIC static __attribute__((unused)) | ||||
| #else | ||||
| #  define ERR_STATIC static  /* this version may generate warnings for unused static functions; disable the relevant warning */ | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /****************************************** | ||||
| *  Error Management | ||||
| ******************************************/ | ||||
| #define PREFIX(name) ZSTD_error_##name | ||||
|  | ||||
| #define ERROR(name) (size_t)-PREFIX(name) | ||||
|  | ||||
| #define ERROR_LIST(ITEM) \ | ||||
|         ITEM(PREFIX(No_Error)) ITEM(PREFIX(GENERIC)) \ | ||||
|         ITEM(PREFIX(memory_allocation)) \ | ||||
|         ITEM(PREFIX(dstSize_tooSmall)) ITEM(PREFIX(srcSize_wrong)) \ | ||||
|         ITEM(PREFIX(prefix_unknown)) ITEM(PREFIX(corruption_detected)) \ | ||||
|         ITEM(PREFIX(tableLog_tooLarge)) ITEM(PREFIX(maxSymbolValue_tooLarge)) ITEM(PREFIX(maxSymbolValue_tooSmall)) \ | ||||
|         ITEM(PREFIX(maxCode)) | ||||
|  | ||||
| #define ERROR_GENERATE_ENUM(ENUM) ENUM, | ||||
| typedef enum { ERROR_LIST(ERROR_GENERATE_ENUM) } ERR_codes;  /* enum is exposed, to detect & handle specific errors; compare function result to -enum value */ | ||||
|  | ||||
| #define ERROR_CONVERTTOSTRING(STRING) #STRING, | ||||
| #define ERROR_GENERATE_STRING(EXPR) ERROR_CONVERTTOSTRING(EXPR) | ||||
|  | ||||
| ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); } | ||||
|  | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif /* ERROR_H_MODULE */ | ||||
|  | ||||
|  | ||||
| /* ****************************************************************** | ||||
|   | ||||
| @@ -10,6 +10,7 @@ | ||||
|  | ||||
| /*- Dependencies -*/ | ||||
| #include "zstd_v04.h" | ||||
| #include "error_private.h" | ||||
|  | ||||
|  | ||||
| /* ****************************************************************** | ||||
| @@ -250,79 +251,6 @@ MEM_STATIC size_t MEM_readLEST(const void* memPtr) | ||||
|  | ||||
| #endif /* MEM_H_MODULE */ | ||||
|  | ||||
| /* ****************************************************************** | ||||
|    Error codes list | ||||
|    Copyright (C) 2016, Yann Collet | ||||
|  | ||||
|    BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) | ||||
|  | ||||
|    Redistribution and use in source and binary forms, with or without | ||||
|    modification, are permitted provided that the following conditions are | ||||
|    met: | ||||
|  | ||||
|        * Redistributions of source code must retain the above copyright | ||||
|    notice, this list of conditions and the following disclaimer. | ||||
|        * Redistributions in binary form must reproduce the above | ||||
|    copyright notice, this list of conditions and the following disclaimer | ||||
|    in the documentation and/or other materials provided with the | ||||
|    distribution. | ||||
|  | ||||
|    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
|    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
|    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
|    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
|    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
|    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
|    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
|    You can contact the author at : | ||||
|    - Source repository : https://github.com/Cyan4973/zstd | ||||
| ****************************************************************** */ | ||||
| #ifndef ERROR_PUBLIC_H_MODULE | ||||
| #define ERROR_PUBLIC_H_MODULE | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* **************************************** | ||||
| *  error list | ||||
| ******************************************/ | ||||
| enum { | ||||
|   ZSTD_error_No_Error, | ||||
|   ZSTD_error_GENERIC, | ||||
|   ZSTD_error_prefix_unknown, | ||||
|   ZSTD_error_frameParameter_unsupported, | ||||
|   ZSTD_error_frameParameter_unsupportedBy32bitsImplementation, | ||||
|   ZSTD_error_init_missing, | ||||
|   ZSTD_error_memory_allocation, | ||||
|   ZSTD_error_stage_wrong, | ||||
|   ZSTD_error_dstSize_tooSmall, | ||||
|   ZSTD_error_srcSize_wrong, | ||||
|   ZSTD_error_corruption_detected, | ||||
|   ZSTD_error_tableLog_tooLarge, | ||||
|   ZSTD_error_maxSymbolValue_tooLarge, | ||||
|   ZSTD_error_maxSymbolValue_tooSmall, | ||||
|   ZSTD_error_maxCode | ||||
| }; | ||||
|  | ||||
| /* note : functions provide error codes in reverse negative order, | ||||
|           so compare with (size_t)(0-enum) */ | ||||
|  | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif /* ERROR_PUBLIC_H_MODULE */ | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
|     zstd - standard compression library | ||||
|     Header File for static linking only | ||||
| @@ -456,115 +384,6 @@ static size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t maxDstS | ||||
| } | ||||
| #endif | ||||
|  | ||||
| /* ****************************************************************** | ||||
|    Error codes and messages | ||||
|    Copyright (C) 2013-2016, Yann Collet | ||||
|  | ||||
|    BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) | ||||
|  | ||||
|    Redistribution and use in source and binary forms, with or without | ||||
|    modification, are permitted provided that the following conditions are | ||||
|    met: | ||||
|  | ||||
|        * Redistributions of source code must retain the above copyright | ||||
|    notice, this list of conditions and the following disclaimer. | ||||
|        * Redistributions in binary form must reproduce the above | ||||
|    copyright notice, this list of conditions and the following disclaimer | ||||
|    in the documentation and/or other materials provided with the | ||||
|    distribution. | ||||
|  | ||||
|    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
|    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
|    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
|    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
|    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
|    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
|    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
|    You can contact the author at : | ||||
|    - Source repository : https://github.com/Cyan4973/zstd | ||||
| ****************************************************************** */ | ||||
| /* Note : this module is expected to remain private, do not expose it */ | ||||
|  | ||||
| #ifndef ERROR_H_MODULE | ||||
| #define ERROR_H_MODULE | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* ***************************************** | ||||
| *  Includes | ||||
| ******************************************/ | ||||
| #include <stddef.h>        /* size_t, ptrdiff_t */ | ||||
|  | ||||
|  | ||||
| /* ***************************************** | ||||
| *  Compiler-specific | ||||
| ******************************************/ | ||||
| #if defined(__GNUC__) | ||||
| #  define ERR_STATIC static __attribute__((unused)) | ||||
| #elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) | ||||
| #  define ERR_STATIC static inline | ||||
| #elif defined(_MSC_VER) | ||||
| #  define ERR_STATIC static __inline | ||||
| #else | ||||
| #  define ERR_STATIC static  /* this version may generate warnings for unused static functions; disable the relevant warning */ | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* ***************************************** | ||||
| *  Error Codes | ||||
| ******************************************/ | ||||
| #define PREFIX(name) ZSTD_error_##name | ||||
|  | ||||
| #ifdef ERROR | ||||
| #  undef ERROR   /* reported already defined on VS 2015 by Rich Geldreich */ | ||||
| #endif | ||||
| #define ERROR(name) (size_t)-PREFIX(name) | ||||
|  | ||||
| ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); } | ||||
|  | ||||
|  | ||||
| /* ***************************************** | ||||
| *  Error Strings | ||||
| ******************************************/ | ||||
|  | ||||
| ERR_STATIC const char* ERR_getErrorName(size_t code) | ||||
| { | ||||
|     static const char* codeError = "Unspecified error code"; | ||||
|     switch( (size_t)(0-code) ) | ||||
|     { | ||||
|     case ZSTD_error_No_Error: return "No error detected"; | ||||
|     case ZSTD_error_GENERIC:  return "Error (generic)"; | ||||
|     case ZSTD_error_prefix_unknown: return "Unknown frame descriptor"; | ||||
|     case ZSTD_error_frameParameter_unsupported: return "Unsupported frame parameter"; | ||||
|     case ZSTD_error_frameParameter_unsupportedBy32bitsImplementation: return "Frame parameter unsupported in 32-bits mode"; | ||||
|     case ZSTD_error_init_missing: return "Context should be init first"; | ||||
|     case ZSTD_error_memory_allocation: return "Allocation error : not enough memory"; | ||||
|     case ZSTD_error_dstSize_tooSmall: return "Destination buffer is too small"; | ||||
|     case ZSTD_error_srcSize_wrong: return "Src size incorrect"; | ||||
|     case ZSTD_error_corruption_detected: return "Corrupted block detected"; | ||||
|     case ZSTD_error_tableLog_tooLarge: return "tableLog requires too much memory"; | ||||
|     case ZSTD_error_maxSymbolValue_tooLarge: return "Unsupported max possible Symbol Value : too large"; | ||||
|     case ZSTD_error_maxSymbolValue_tooSmall: return "Specified maxSymbolValue is too small"; | ||||
|     case ZSTD_error_maxCode: | ||||
|     default: return codeError; | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif /* ERROR_H_MODULE */ | ||||
|  | ||||
|  | ||||
| #endif  /* ZSTD_STATIC_H */ | ||||
|  | ||||
| @@ -2955,7 +2774,7 @@ static size_t ZSTD_decodeFrameHeader_Part2(ZSTD_DCtx* zc, const void* src, size_ | ||||
|     size_t result; | ||||
|     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); | ||||
|     if ((MEM_32bits()) && (zc->params.windowLog > 25)) return ERROR(frameParameter_unsupportedBy32bits); | ||||
|     return result; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -10,6 +10,7 @@ | ||||
|  | ||||
| /*- Dependencies -*/ | ||||
| #include "zstd_v05.h" | ||||
| #include "error_private.h" | ||||
|  | ||||
|  | ||||
| /* ****************************************************************** | ||||
| @@ -254,79 +255,6 @@ MEM_STATIC size_t MEM_readLEST(const void* memPtr) | ||||
|  | ||||
| #endif /* MEM_H_MODULE */ | ||||
|  | ||||
| /* ****************************************************************** | ||||
|    Error codes list | ||||
|    Copyright (C) 2016, Yann Collet | ||||
|  | ||||
|    BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) | ||||
|  | ||||
|    Redistribution and use in source and binary forms, with or without | ||||
|    modification, are permitted provided that the following conditions are | ||||
|    met: | ||||
|  | ||||
|        * Redistributions of source code must retain the above copyright | ||||
|    notice, this list of conditions and the following disclaimer. | ||||
|        * Redistributions in binary form must reproduce the above | ||||
|    copyright notice, this list of conditions and the following disclaimer | ||||
|    in the documentation and/or other materials provided with the | ||||
|    distribution. | ||||
|  | ||||
|    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
|    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
|    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
|    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
|    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
|    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
|    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
|    You can contact the author at : | ||||
|    - Source repository : https://github.com/Cyan4973/zstd | ||||
| ****************************************************************** */ | ||||
| #ifndef ERROR_PUBLIC_H_MODULE | ||||
| #define ERROR_PUBLIC_H_MODULE | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* **************************************** | ||||
| *  error codes list | ||||
| ******************************************/ | ||||
| typedef enum { | ||||
|   ZSTDv05_error_no_error, | ||||
|   ZSTDv05_error_GENERIC, | ||||
|   ZSTDv05_error_prefix_unknown, | ||||
|   ZSTDv05_error_frameParameter_unsupported, | ||||
|   ZSTDv05_error_frameParameter_unsupportedBy32bits, | ||||
|   ZSTDv05_error_init_missing, | ||||
|   ZSTDv05_error_memory_allocation, | ||||
|   ZSTDv05_error_stage_wrong, | ||||
|   ZSTDv05_error_dstSize_tooSmall, | ||||
|   ZSTDv05_error_srcSize_wrong, | ||||
|   ZSTDv05_error_corruption_detected, | ||||
|   ZSTDv05_error_tableLog_tooLarge, | ||||
|   ZSTDv05_error_maxSymbolValue_tooLarge, | ||||
|   ZSTDv05_error_maxSymbolValue_tooSmall, | ||||
|   ZSTDv05_error_dictionary_corrupted, | ||||
|   ZSTDv05_error_maxCode | ||||
| } ZSTDv05_ErrorCode; | ||||
|  | ||||
| /* note : functions provide error codes in reverse negative order, | ||||
|           so compare with (size_t)(0-enum) */ | ||||
|  | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif /* ERROR_PUBLIC_H_MODULE */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|     zstd - standard compression library | ||||
|     Header File for static linking only | ||||
| @@ -470,119 +398,6 @@ size_t ZSTDv05_decompressBlock(ZSTDv05_DCtx* dctx, void* dst, size_t dstCapacity | ||||
| #endif  /* ZSTDv05_STATIC_H */ | ||||
|  | ||||
|  | ||||
|  | ||||
| /* ****************************************************************** | ||||
|    Error codes and messages | ||||
|    Copyright (C) 2013-2016, Yann Collet | ||||
|  | ||||
|    BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) | ||||
|  | ||||
|    Redistribution and use in source and binary forms, with or without | ||||
|    modification, are permitted provided that the following conditions are | ||||
|    met: | ||||
|  | ||||
|        * Redistributions of source code must retain the above copyright | ||||
|    notice, this list of conditions and the following disclaimer. | ||||
|        * Redistributions in binary form must reproduce the above | ||||
|    copyright notice, this list of conditions and the following disclaimer | ||||
|    in the documentation and/or other materials provided with the | ||||
|    distribution. | ||||
|  | ||||
|    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
|    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
|    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
|    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
|    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
|    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
|    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
|    You can contact the author at : | ||||
|    - Source repository : https://github.com/Cyan4973/zstd | ||||
| ****************************************************************** */ | ||||
| /* Note : this module is expected to remain private, do not expose it */ | ||||
|  | ||||
| #ifndef ERROR_H_MODULE | ||||
| #define ERROR_H_MODULE | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
|  | ||||
| /* **************************************** | ||||
| *  Compiler-specific | ||||
| ******************************************/ | ||||
| #if defined(__GNUC__) | ||||
| #  define ERR_STATIC static __attribute__((unused)) | ||||
| #elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) | ||||
| #  define ERR_STATIC static inline | ||||
| #elif defined(_MSC_VER) | ||||
| #  define ERR_STATIC static __inline | ||||
| #else | ||||
| #  define ERR_STATIC static  /* this version may generate warnings for unused static functions; disable the relevant warning */ | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /*-**************************************** | ||||
| *  Customization | ||||
| ******************************************/ | ||||
| typedef ZSTDv05_ErrorCode ERR_enum; | ||||
| #define PREFIX(name) ZSTDv05_error_##name | ||||
|  | ||||
|  | ||||
| /*-**************************************** | ||||
| *  Error codes handling | ||||
| ******************************************/ | ||||
| #ifdef ERROR | ||||
| #  undef ERROR   /* reported already defined on VS 2015 (Rich Geldreich) */ | ||||
| #endif | ||||
| #define ERROR(name) (size_t)-PREFIX(name) | ||||
|  | ||||
| ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); } | ||||
|  | ||||
| ERR_STATIC ERR_enum ERR_getError(size_t code) { if (!ERR_isError(code)) return (ERR_enum)0; return (ERR_enum) (0-code); } | ||||
|  | ||||
|  | ||||
| /*-**************************************** | ||||
| *  Error Strings | ||||
| ******************************************/ | ||||
|  | ||||
| ERR_STATIC const char* ERR_getErrorName(size_t code) | ||||
| { | ||||
|     static const char* notErrorCode = "Unspecified error code"; | ||||
|     switch( ERR_getError(code) ) | ||||
|     { | ||||
|     case PREFIX(no_error): return "No error detected"; | ||||
|     case PREFIX(GENERIC):  return "Error (generic)"; | ||||
|     case PREFIX(prefix_unknown): return "Unknown frame descriptor"; | ||||
|     case PREFIX(frameParameter_unsupported): return "Unsupported frame parameter"; | ||||
|     case PREFIX(frameParameter_unsupportedBy32bits): return "Frame parameter unsupported in 32-bits mode"; | ||||
|     case PREFIX(init_missing): return "Context should be init first"; | ||||
|     case PREFIX(memory_allocation): return "Allocation error : not enough memory"; | ||||
|     case PREFIX(stage_wrong): return "Operation not authorized at current processing stage"; | ||||
|     case PREFIX(dstSize_tooSmall): return "Destination buffer is too small"; | ||||
|     case PREFIX(srcSize_wrong): return "Src size incorrect"; | ||||
|     case PREFIX(corruption_detected): return "Corrupted block detected"; | ||||
|     case PREFIX(tableLog_tooLarge): return "tableLog requires too much memory"; | ||||
|     case PREFIX(maxSymbolValue_tooLarge): return "Unsupported max possible Symbol Value : too large"; | ||||
|     case PREFIX(maxSymbolValue_tooSmall): return "Specified maxSymbolValue is too small"; | ||||
|     case PREFIX(dictionary_corrupted): return "Dictionary is corrupted"; | ||||
|     case PREFIX(maxCode): | ||||
|     default: return notErrorCode;   /* should be impossible, due to ERR_getError() */ | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif /* ERROR_H_MODULE */ | ||||
| /* | ||||
|     zstd_internal - common functions to include | ||||
|     Header File for include | ||||
| @@ -2883,9 +2698,6 @@ static void ZSTDv05_copy4(void* dst, const void* src) { memcpy(dst, src, 4); } | ||||
| *   tells if a return value is an error code */ | ||||
| unsigned ZSTDv05_isError(size_t code) { return ERR_isError(code); } | ||||
|  | ||||
| /*! ZSTDv05_getError() : | ||||
| *   convert a `size_t` function result into a proper ZSTDv05_errorCode enum */ | ||||
| ZSTDv05_ErrorCode ZSTDv05_getError(size_t code) { return ERR_getError(code); } | ||||
|  | ||||
| /*! ZSTDv05_getErrorName() : | ||||
| *   provides error code string (useful for debugging) */ | ||||
|   | ||||
| @@ -13,6 +13,7 @@ | ||||
| #include <stddef.h>    /* size_t, ptrdiff_t */ | ||||
| #include <string.h>    /* memcpy */ | ||||
| #include <stdlib.h>    /* malloc, free, qsort */ | ||||
| #include "error_private.h" | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -273,77 +274,6 @@ MEM_STATIC size_t MEM_readLEST(const void* memPtr) | ||||
|  | ||||
| #endif /* MEM_H_MODULE */ | ||||
|  | ||||
| /* ****************************************************************** | ||||
|    Error codes list | ||||
|    Copyright (C) 2016, Yann Collet | ||||
|  | ||||
|    BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) | ||||
|  | ||||
|    Redistribution and use in source and binary forms, with or without | ||||
|    modification, are permitted provided that the following conditions are | ||||
|    met: | ||||
|  | ||||
|        * Redistributions of source code must retain the above copyright | ||||
|    notice, this list of conditions and the following disclaimer. | ||||
|        * Redistributions in binary form must reproduce the above | ||||
|    copyright notice, this list of conditions and the following disclaimer | ||||
|    in the documentation and/or other materials provided with the | ||||
|    distribution. | ||||
|  | ||||
|    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
|    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
|    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
|    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
|    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
|    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
|    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
|    You can contact the author at : | ||||
|    - Homepage : http://www.zstd.net | ||||
| ****************************************************************** */ | ||||
| #ifndef ERROR_PUBLIC_H_MODULE | ||||
| #define ERROR_PUBLIC_H_MODULE | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* **************************************** | ||||
| *  error codes list | ||||
| ******************************************/ | ||||
| typedef enum { | ||||
|   ZSTDv06_error_no_error, | ||||
|   ZSTDv06_error_GENERIC, | ||||
|   ZSTDv06_error_prefix_unknown, | ||||
|   ZSTDv06_error_frameParameter_unsupported, | ||||
|   ZSTDv06_error_frameParameter_unsupportedBy32bits, | ||||
|   ZSTDv06_error_compressionParameter_unsupported, | ||||
|   ZSTDv06_error_init_missing, | ||||
|   ZSTDv06_error_memory_allocation, | ||||
|   ZSTDv06_error_stage_wrong, | ||||
|   ZSTDv06_error_dstSize_tooSmall, | ||||
|   ZSTDv06_error_srcSize_wrong, | ||||
|   ZSTDv06_error_corruption_detected, | ||||
|   ZSTDv06_error_tableLog_tooLarge, | ||||
|   ZSTDv06_error_maxSymbolValue_tooLarge, | ||||
|   ZSTDv06_error_maxSymbolValue_tooSmall, | ||||
|   ZSTDv06_error_dictionary_corrupted, | ||||
|   ZSTDv06_error_maxCode | ||||
| } ZSTDv06_ErrorCode; | ||||
|  | ||||
| /* note : compare with size_t function results using ZSTDv06_getError() */ | ||||
|  | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif /* ERROR_PUBLIC_H_MODULE */ | ||||
| /* | ||||
|     zstd - standard compression library | ||||
|     Header File for static linking only | ||||
| @@ -469,137 +399,12 @@ ZSTDLIB_API size_t ZSTDv06_decompressBegin(ZSTDv06_DCtx* dctx); | ||||
| ZSTDLIB_API size_t ZSTDv06_decompressBlock(ZSTDv06_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); | ||||
|  | ||||
|  | ||||
| /*-************************************* | ||||
| *  Error management | ||||
| ***************************************/ | ||||
| /*! ZSTDv06_getErrorCode() : | ||||
|     convert a `size_t` function result into a `ZSTDv06_ErrorCode` enum type, | ||||
|     which can be used to compare directly with enum list published into "error_public.h" */ | ||||
| ZSTDLIB_API ZSTDv06_ErrorCode ZSTDv06_getErrorCode(size_t functionResult); | ||||
| ZSTDLIB_API const char* ZSTDv06_getErrorString(ZSTDv06_ErrorCode code); | ||||
|  | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif  /* ZSTDv06_STATIC_H */ | ||||
| /* ****************************************************************** | ||||
|    Error codes and messages | ||||
|    Copyright (C) 2013-2016, Yann Collet | ||||
|  | ||||
|    BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) | ||||
|  | ||||
|    Redistribution and use in source and binary forms, with or without | ||||
|    modification, are permitted provided that the following conditions are | ||||
|    met: | ||||
|  | ||||
|        * Redistributions of source code must retain the above copyright | ||||
|    notice, this list of conditions and the following disclaimer. | ||||
|        * Redistributions in binary form must reproduce the above | ||||
|    copyright notice, this list of conditions and the following disclaimer | ||||
|    in the documentation and/or other materials provided with the | ||||
|    distribution. | ||||
|  | ||||
|    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
|    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
|    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
|    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
|    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
|    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
|    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
|    You can contact the author at : | ||||
|    - Homepage : http://www.zstd.net | ||||
| ****************************************************************** */ | ||||
| /* Note : this module is expected to remain private, do not expose it */ | ||||
|  | ||||
| #ifndef ERROR_H_MODULE | ||||
| #define ERROR_H_MODULE | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* **************************************** | ||||
| *  Compiler-specific | ||||
| ******************************************/ | ||||
| #if defined(__GNUC__) | ||||
| #  define ERR_STATIC static __attribute__((unused)) | ||||
| #elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) | ||||
| #  define ERR_STATIC static inline | ||||
| #elif defined(_MSC_VER) | ||||
| #  define ERR_STATIC static __inline | ||||
| #else | ||||
| #  define ERR_STATIC static  /* this version may generate warnings for unused static functions; disable the relevant warning */ | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /*-**************************************** | ||||
| *  Customization (error_public.h) | ||||
| ******************************************/ | ||||
| typedef ZSTDv06_ErrorCode ERR_enum; | ||||
| #define PREFIX(name) ZSTDv06_error_##name | ||||
|  | ||||
|  | ||||
| /*-**************************************** | ||||
| *  Error codes handling | ||||
| ******************************************/ | ||||
| #ifdef ERROR | ||||
| #  undef ERROR   /* reported already defined on VS 2015 (Rich Geldreich) */ | ||||
| #endif | ||||
| #define ERROR(name) ((size_t)-PREFIX(name)) | ||||
|  | ||||
| ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); } | ||||
|  | ||||
| ERR_STATIC ERR_enum ERR_getErrorCode(size_t code) { if (!ERR_isError(code)) return (ERR_enum)0; return (ERR_enum) (0-code); } | ||||
|  | ||||
|  | ||||
| /*-**************************************** | ||||
| *  Error Strings | ||||
| ******************************************/ | ||||
|  | ||||
| ERR_STATIC const char* ERR_getErrorString(ERR_enum code) | ||||
| { | ||||
|     static const char* notErrorCode = "Unspecified error code"; | ||||
|     switch( code ) | ||||
|     { | ||||
|     case PREFIX(no_error): return "No error detected"; | ||||
|     case PREFIX(GENERIC):  return "Error (generic)"; | ||||
|     case PREFIX(prefix_unknown): return "Unknown frame descriptor"; | ||||
|     case PREFIX(frameParameter_unsupported): return "Unsupported frame parameter"; | ||||
|     case PREFIX(frameParameter_unsupportedBy32bits): return "Frame parameter unsupported in 32-bits mode"; | ||||
|     case PREFIX(compressionParameter_unsupported): return "Compression parameter is out of bound"; | ||||
|     case PREFIX(init_missing): return "Context should be init first"; | ||||
|     case PREFIX(memory_allocation): return "Allocation error : not enough memory"; | ||||
|     case PREFIX(stage_wrong): return "Operation not authorized at current processing stage"; | ||||
|     case PREFIX(dstSize_tooSmall): return "Destination buffer is too small"; | ||||
|     case PREFIX(srcSize_wrong): return "Src size incorrect"; | ||||
|     case PREFIX(corruption_detected): return "Corrupted block detected"; | ||||
|     case PREFIX(tableLog_tooLarge): return "tableLog requires too much memory : unsupported"; | ||||
|     case PREFIX(maxSymbolValue_tooLarge): return "Unsupported max Symbol Value : too large"; | ||||
|     case PREFIX(maxSymbolValue_tooSmall): return "Specified maxSymbolValue is too small"; | ||||
|     case PREFIX(dictionary_corrupted): return "Dictionary is corrupted"; | ||||
|     case PREFIX(maxCode): | ||||
|     default: return notErrorCode; | ||||
|     } | ||||
| } | ||||
|  | ||||
| ERR_STATIC const char* ERR_getErrorName(size_t code) | ||||
| { | ||||
|     return ERR_getErrorString(ERR_getErrorCode(code)); | ||||
| } | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif /* ERROR_H_MODULE */ | ||||
| /* | ||||
|     zstd_internal - common functions to include | ||||
|     Header File for include | ||||
| @@ -2986,14 +2791,6 @@ unsigned ZSTDv06_isError(size_t code) { return ERR_isError(code); } | ||||
| *   provides error code string from function result (useful for debugging) */ | ||||
| const char* ZSTDv06_getErrorName(size_t code) { return ERR_getErrorName(code); } | ||||
|  | ||||
| /*! ZSTDv06_getError() : | ||||
| *   convert a `size_t` function result into a proper ZSTDv06_errorCode enum */ | ||||
| ZSTDv06_ErrorCode ZSTDv06_getErrorCode(size_t code) { return ERR_getErrorCode(code); } | ||||
|  | ||||
| /*! ZSTDv06_getErrorString() : | ||||
| *   provides error code string from enum */ | ||||
| const char* ZSTDv06_getErrorString(ZSTDv06_ErrorCode code) { return ERR_getErrorName(code); } | ||||
|  | ||||
|  | ||||
| /* ************************************************************** | ||||
| *  ZBUFF Error Management | ||||
|   | ||||
| @@ -21,6 +21,8 @@ | ||||
| #define HUFv07_STATIC_LINKING_ONLY  /* HUFv07_TABLELOG_ABSOLUTEMAX */ | ||||
| #define ZSTDv07_STATIC_LINKING_ONLY | ||||
|  | ||||
| #include "error_private.h" | ||||
|  | ||||
|  | ||||
| #ifdef ZSTDv07_STATIC_LINKING_ONLY | ||||
|  | ||||
| @@ -427,203 +429,6 @@ MEM_STATIC size_t MEM_readLEST(const void* memPtr) | ||||
| #endif | ||||
|  | ||||
| #endif /* MEM_H_MODULE */ | ||||
|  | ||||
| /* ****************************************************************** | ||||
|    Error codes list | ||||
|    Copyright (C) 2016, Yann Collet | ||||
|  | ||||
|    BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) | ||||
|  | ||||
|    Redistribution and use in source and binary forms, with or without | ||||
|    modification, are permitted provided that the following conditions are | ||||
|    met: | ||||
|  | ||||
|        * Redistributions of source code must retain the above copyright | ||||
|    notice, this list of conditions and the following disclaimer. | ||||
|        * Redistributions in binary form must reproduce the above | ||||
|    copyright notice, this list of conditions and the following disclaimer | ||||
|    in the documentation and/or other materials provided with the | ||||
|    distribution. | ||||
|  | ||||
|    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
|    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
|    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
|    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
|    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
|    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
|    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
|    You can contact the author at : | ||||
|    - Homepage : http://www.zstd.net | ||||
| ****************************************************************** */ | ||||
| #ifndef ERROR_PUBLIC_H_MODULE | ||||
| #define ERROR_PUBLIC_H_MODULE | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* **************************************** | ||||
| *  error codes list | ||||
| ******************************************/ | ||||
| typedef enum { | ||||
|   ZSTDv07_error_no_error, | ||||
|   ZSTDv07_error_GENERIC, | ||||
|   ZSTDv07_error_prefix_unknown, | ||||
|   ZSTDv07_error_frameParameter_unsupported, | ||||
|   ZSTDv07_error_frameParameter_unsupportedBy32bits, | ||||
|   ZSTDv07_error_compressionParameter_unsupported, | ||||
|   ZSTDv07_error_init_missing, | ||||
|   ZSTDv07_error_memory_allocation, | ||||
|   ZSTDv07_error_stage_wrong, | ||||
|   ZSTDv07_error_dstSize_tooSmall, | ||||
|   ZSTDv07_error_srcSize_wrong, | ||||
|   ZSTDv07_error_corruption_detected, | ||||
|   ZSTDv07_error_checksum_wrong, | ||||
|   ZSTDv07_error_tableLog_tooLarge, | ||||
|   ZSTDv07_error_maxSymbolValue_tooLarge, | ||||
|   ZSTDv07_error_maxSymbolValue_tooSmall, | ||||
|   ZSTDv07_error_dictionary_corrupted, | ||||
|   ZSTDv07_error_dictionary_wrong, | ||||
|   ZSTDv07_error_maxCode | ||||
| } ZSTDv07_ErrorCode; | ||||
|  | ||||
| /*! ZSTDv07_getErrorCode() : | ||||
|     convert a `size_t` function result into a `ZSTDv07_ErrorCode` enum type, | ||||
|     which can be used to compare directly with enum list published into "error_public.h" */ | ||||
| ZSTDv07_ErrorCode ZSTDv07_getErrorCode(size_t functionResult); | ||||
| const char* ZSTDv07_getErrorString(ZSTDv07_ErrorCode code); | ||||
|  | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif /* ERROR_PUBLIC_H_MODULE */ | ||||
| /* ****************************************************************** | ||||
|    Error codes and messages | ||||
|    Copyright (C) 2013-2016, Yann Collet | ||||
|  | ||||
|    BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) | ||||
|  | ||||
|    Redistribution and use in source and binary forms, with or without | ||||
|    modification, are permitted provided that the following conditions are | ||||
|    met: | ||||
|  | ||||
|        * Redistributions of source code must retain the above copyright | ||||
|    notice, this list of conditions and the following disclaimer. | ||||
|        * Redistributions in binary form must reproduce the above | ||||
|    copyright notice, this list of conditions and the following disclaimer | ||||
|    in the documentation and/or other materials provided with the | ||||
|    distribution. | ||||
|  | ||||
|    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
|    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
|    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
|    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
|    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
|    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
|    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
|    You can contact the author at : | ||||
|    - Homepage : http://www.zstd.net | ||||
| ****************************************************************** */ | ||||
| /* Note : this module is expected to remain private, do not expose it */ | ||||
|  | ||||
| #ifndef ERROR_H_MODULE | ||||
| #define ERROR_H_MODULE | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
|  | ||||
| /* **************************************** | ||||
| *  Compiler-specific | ||||
| ******************************************/ | ||||
| #if defined(__GNUC__) | ||||
| #  define ERR_STATIC static __attribute__((unused)) | ||||
| #elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) | ||||
| #  define ERR_STATIC static inline | ||||
| #elif defined(_MSC_VER) | ||||
| #  define ERR_STATIC static __inline | ||||
| #else | ||||
| #  define ERR_STATIC static  /* this version may generate warnings for unused static functions; disable the relevant warning */ | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /*-**************************************** | ||||
| *  Customization (error_public.h) | ||||
| ******************************************/ | ||||
| typedef ZSTDv07_ErrorCode ERR_enum; | ||||
| #define PREFIX(name) ZSTDv07_error_##name | ||||
|  | ||||
|  | ||||
| /*-**************************************** | ||||
| *  Error codes handling | ||||
| ******************************************/ | ||||
| #ifdef ERROR | ||||
| #  undef ERROR   /* reported already defined on VS 2015 (Rich Geldreich) */ | ||||
| #endif | ||||
| #define ERROR(name) ((size_t)-PREFIX(name)) | ||||
|  | ||||
| ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); } | ||||
|  | ||||
| ERR_STATIC ERR_enum ERR_getErrorCode(size_t code) { if (!ERR_isError(code)) return (ERR_enum)0; return (ERR_enum) (0-code); } | ||||
|  | ||||
|  | ||||
| /*-**************************************** | ||||
| *  Error Strings | ||||
| ******************************************/ | ||||
|  | ||||
| ERR_STATIC const char* ERR_getErrorString(ERR_enum code) | ||||
| { | ||||
|     static const char* notErrorCode = "Unspecified error code"; | ||||
|     switch( code ) | ||||
|     { | ||||
|     case PREFIX(no_error): return "No error detected"; | ||||
|     case PREFIX(GENERIC):  return "Error (generic)"; | ||||
|     case PREFIX(prefix_unknown): return "Unknown frame descriptor"; | ||||
|     case PREFIX(frameParameter_unsupported): return "Unsupported frame parameter"; | ||||
|     case PREFIX(frameParameter_unsupportedBy32bits): return "Frame parameter unsupported in 32-bits mode"; | ||||
|     case PREFIX(compressionParameter_unsupported): return "Compression parameter is out of bound"; | ||||
|     case PREFIX(init_missing): return "Context should be init first"; | ||||
|     case PREFIX(memory_allocation): return "Allocation error : not enough memory"; | ||||
|     case PREFIX(stage_wrong): return "Operation not authorized at current processing stage"; | ||||
|     case PREFIX(dstSize_tooSmall): return "Destination buffer is too small"; | ||||
|     case PREFIX(srcSize_wrong): return "Src size incorrect"; | ||||
|     case PREFIX(corruption_detected): return "Corrupted block detected"; | ||||
|     case PREFIX(checksum_wrong): return "Restored data doesn't match checksum"; | ||||
|     case PREFIX(tableLog_tooLarge): return "tableLog requires too much memory : unsupported"; | ||||
|     case PREFIX(maxSymbolValue_tooLarge): return "Unsupported max Symbol Value : too large"; | ||||
|     case PREFIX(maxSymbolValue_tooSmall): return "Specified maxSymbolValue is too small"; | ||||
|     case PREFIX(dictionary_corrupted): return "Dictionary is corrupted"; | ||||
|     case PREFIX(dictionary_wrong): return "Dictionary mismatch"; | ||||
|     case PREFIX(maxCode): | ||||
|     default: return notErrorCode; | ||||
|     } | ||||
| } | ||||
|  | ||||
| ERR_STATIC const char* ERR_getErrorName(size_t code) | ||||
| { | ||||
|     return ERR_getErrorString(ERR_getErrorCode(code)); | ||||
| } | ||||
|  | ||||
| #if defined (__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif /* ERROR_H_MODULE */ | ||||
| /* ****************************************************************** | ||||
|    bitstream | ||||
|    Part of FSE library | ||||
| @@ -2882,13 +2687,6 @@ unsigned ZSTDv07_isError(size_t code) { return ERR_isError(code); } | ||||
| *   provides error code string from function result (useful for debugging) */ | ||||
| const char* ZSTDv07_getErrorName(size_t code) { return ERR_getErrorName(code); } | ||||
|  | ||||
| /*! ZSTDv07_getError() : | ||||
| *   convert a `size_t` function result into a proper ZSTDv07_errorCode enum */ | ||||
| ZSTDv07_ErrorCode ZSTDv07_getErrorCode(size_t code) { return ERR_getErrorCode(code); } | ||||
|  | ||||
| /*! ZSTDv07_getErrorString() : | ||||
| *   provides error code string from enum */ | ||||
| const char* ZSTDv07_getErrorString(ZSTDv07_ErrorCode code) { return ERR_getErrorName(code); } | ||||
|  | ||||
|  | ||||
| /* ************************************************************** | ||||
|   | ||||
		Reference in New Issue
	
	Block a user