modified error system, following suggestions by @nemequ
This commit is contained in:
parent
74ce8e812c
commit
977f1f3600
@ -51,7 +51,7 @@ extern "C" {
|
|||||||
* Includes
|
* Includes
|
||||||
******************************************/
|
******************************************/
|
||||||
#include "mem.h" /* unaligned access routines */
|
#include "mem.h" /* unaligned access routines */
|
||||||
#include "error.h" /* error codes and messages */
|
#include "error_private.h" /* error codes and messages */
|
||||||
|
|
||||||
|
|
||||||
/********************************************
|
/********************************************
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* ******************************************************************
|
/* ******************************************************************
|
||||||
Error codes and messages
|
Error codes and messages
|
||||||
Copyright (C) 2013-2015, Yann Collet
|
Copyright (C) 2013-2016, Yann Collet
|
||||||
|
|
||||||
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
|
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
|
||||||
|
|
||||||
@ -28,9 +28,10 @@
|
|||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You can contact the author at :
|
You can contact the author at :
|
||||||
- Source repository : https://github.com/Cyan4973/FiniteStateEntropy
|
- Source repository : https://github.com/Cyan4973/zstd
|
||||||
- Public forum : https://groups.google.com/forum/#!forum/lz4c
|
|
||||||
****************************************************************** */
|
****************************************************************** */
|
||||||
|
/* Note : this module is expected to remain private, do not expose it */
|
||||||
|
|
||||||
#ifndef ERROR_H_MODULE
|
#ifndef ERROR_H_MODULE
|
||||||
#define ERROR_H_MODULE
|
#define ERROR_H_MODULE
|
||||||
|
|
||||||
@ -43,24 +44,25 @@ extern "C" {
|
|||||||
* Includes
|
* Includes
|
||||||
******************************************/
|
******************************************/
|
||||||
#include <stddef.h> /* size_t, ptrdiff_t */
|
#include <stddef.h> /* size_t, ptrdiff_t */
|
||||||
|
#include "error_public.h" /* enum list */
|
||||||
|
|
||||||
|
|
||||||
/* *****************************************
|
/* *****************************************
|
||||||
* Compiler-specific
|
* Compiler-specific
|
||||||
******************************************/
|
******************************************/
|
||||||
#if defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
|
#if defined(__GNUC__)
|
||||||
|
# define ERR_STATIC static __attribute__((unused))
|
||||||
|
#elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
|
||||||
# define ERR_STATIC static inline
|
# define ERR_STATIC static inline
|
||||||
#elif defined(_MSC_VER)
|
#elif defined(_MSC_VER)
|
||||||
# define ERR_STATIC static __inline
|
# define ERR_STATIC static __inline
|
||||||
#elif defined(__GNUC__)
|
|
||||||
# define ERR_STATIC static __attribute__((unused))
|
|
||||||
#else
|
#else
|
||||||
# define ERR_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
|
# define ERR_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* *****************************************
|
/* *****************************************
|
||||||
* Error Management
|
* Error Codes
|
||||||
******************************************/
|
******************************************/
|
||||||
#define PREFIX(name) ZSTD_error_##name
|
#define PREFIX(name) ZSTD_error_##name
|
||||||
|
|
||||||
@ -69,29 +71,34 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
#define ERROR(name) (size_t)-PREFIX(name)
|
#define ERROR(name) (size_t)-PREFIX(name)
|
||||||
|
|
||||||
#define ERROR_LIST(ITEM) \
|
|
||||||
ITEM(PREFIX(No_Error)) ITEM(PREFIX(GENERIC)) \
|
|
||||||
ITEM(PREFIX(prefix_unknown)) ITEM(PREFIX(frameParameter_unsupported)) ITEM(PREFIX(frameParameter_unsupportedBy32bitsImplementation)) \
|
|
||||||
ITEM(PREFIX(init_missing)) ITEM(PREFIX(memory_allocation)) ITEM(PREFIX(stage_wrong)) \
|
|
||||||
ITEM(PREFIX(dstSize_tooSmall)) ITEM(PREFIX(srcSize_wrong)) \
|
|
||||||
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)
|
|
||||||
static const char* ERR_strings[] = { ERROR_LIST(ERROR_GENERATE_STRING) };
|
|
||||||
|
|
||||||
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
|
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
|
||||||
|
|
||||||
|
|
||||||
|
/* *****************************************
|
||||||
|
* Error Strings
|
||||||
|
******************************************/
|
||||||
|
|
||||||
ERR_STATIC const char* ERR_getErrorName(size_t code)
|
ERR_STATIC const char* ERR_getErrorName(size_t code)
|
||||||
{
|
{
|
||||||
static const char* codeError = "Unspecified error code";
|
static const char* codeError = "Unspecified error code";
|
||||||
if (ERR_isError(code)) return ERR_strings[-(int)(code)];
|
switch( (size_t)-code )
|
||||||
return codeError;
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
69
lib/error_public.h
Normal file
69
lib/error_public.h
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/* ******************************************************************
|
||||||
|
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 are provided as (size_t)-enum */
|
||||||
|
|
||||||
|
|
||||||
|
#if defined (__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* ERROR_PUBLIC_H_MODULE */
|
@ -39,7 +39,7 @@
|
|||||||
* Includes
|
* Includes
|
||||||
***************************************/
|
***************************************/
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "error.h"
|
#include "error_private.h"
|
||||||
#include "zstd_static.h"
|
#include "zstd_static.h"
|
||||||
#include "zstd_buffered_static.h"
|
#include "zstd_buffered_static.h"
|
||||||
|
|
||||||
@ -243,6 +243,8 @@ static size_t ZBUFF_compressContinue_generic(ZBUFF_CCtx* zbc,
|
|||||||
zbc->stage = ZBUFFcs_load;
|
zbc->stage = ZBUFFcs_load;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
return ERROR(GENERIC); /* impossible */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -534,6 +536,7 @@ size_t ZBUFF_decompressContinue(ZBUFF_DCtx* zbc, void* dst, size_t* maxDstSizePt
|
|||||||
notDone = 0;
|
notDone = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
default: return ERROR(GENERIC); /* impossible */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ extern "C" {
|
|||||||
* Includes
|
* Includes
|
||||||
***************************************/
|
***************************************/
|
||||||
#include "mem.h"
|
#include "mem.h"
|
||||||
#include "error.h"
|
#include "error_private.h"
|
||||||
|
|
||||||
|
|
||||||
/* *************************************
|
/* *************************************
|
||||||
|
@ -334,7 +334,7 @@ static const ZSTD_parameters ZSTD_defaultParameters[4][ZSTD_MAX_CLEVEL+1] = {
|
|||||||
/* *************************************
|
/* *************************************
|
||||||
* Error management
|
* Error management
|
||||||
***************************************/
|
***************************************/
|
||||||
#include "error.h"
|
#include "error_public.h"
|
||||||
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
#if defined (__cplusplus)
|
||||||
|
@ -45,7 +45,7 @@ DESTDIR?=
|
|||||||
PREFIX ?= /usr/local
|
PREFIX ?= /usr/local
|
||||||
CPPFLAGS= -I../lib -DZSTD_VERSION=\"$(VERSION)\"
|
CPPFLAGS= -I../lib -DZSTD_VERSION=\"$(VERSION)\"
|
||||||
CFLAGS ?= -O3 # -falign-loops=32 # not always beneficial
|
CFLAGS ?= -O3 # -falign-loops=32 # not always beneficial
|
||||||
CFLAGS += -std=c99 -Wall -Wextra -Wundef -Wshadow -Wcast-qual -Wcast-align -Wstrict-prototypes -Wstrict-aliasing=1
|
CFLAGS += -std=c99 -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow -Wstrict-aliasing=1 -Wswitch-enum -Wstrict-prototypes -Wundef
|
||||||
FLAGS = $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(MOREFLAGS)
|
FLAGS = $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(MOREFLAGS)
|
||||||
|
|
||||||
BINDIR = $(PREFIX)/bin
|
BINDIR = $(PREFIX)/bin
|
||||||
|
@ -185,13 +185,13 @@ static int basicUnitTests(U32 seed, double compressibility)
|
|||||||
DISPLAYLEVEL(4, "test%3i : decompress with 1 missing byte : ", testNb++);
|
DISPLAYLEVEL(4, "test%3i : decompress with 1 missing byte : ", testNb++);
|
||||||
result = ZSTD_decompress(decodedBuffer, COMPRESSIBLE_NOISE_LENGTH, compressedBuffer, cSize-1);
|
result = ZSTD_decompress(decodedBuffer, COMPRESSIBLE_NOISE_LENGTH, compressedBuffer, cSize-1);
|
||||||
if (!ZSTD_isError(result)) goto _output_error;
|
if (!ZSTD_isError(result)) goto _output_error;
|
||||||
if (result != ERROR(srcSize_wrong)) goto _output_error;
|
if (result != (size_t)-ZSTD_error_srcSize_wrong) goto _output_error;
|
||||||
DISPLAYLEVEL(4, "OK \n");
|
DISPLAYLEVEL(4, "OK \n");
|
||||||
|
|
||||||
DISPLAYLEVEL(4, "test%3i : decompress with 1 too much byte : ", testNb++);
|
DISPLAYLEVEL(4, "test%3i : decompress with 1 too much byte : ", testNb++);
|
||||||
result = ZSTD_decompress(decodedBuffer, COMPRESSIBLE_NOISE_LENGTH, compressedBuffer, cSize+1);
|
result = ZSTD_decompress(decodedBuffer, COMPRESSIBLE_NOISE_LENGTH, compressedBuffer, cSize+1);
|
||||||
if (!ZSTD_isError(result)) goto _output_error;
|
if (!ZSTD_isError(result)) goto _output_error;
|
||||||
if (result != ERROR(srcSize_wrong)) goto _output_error;
|
if (result != (size_t)-ZSTD_error_srcSize_wrong) goto _output_error;
|
||||||
DISPLAYLEVEL(4, "OK \n");
|
DISPLAYLEVEL(4, "OK \n");
|
||||||
|
|
||||||
/* Dictionary and Duplication tests */
|
/* Dictionary and Duplication tests */
|
||||||
@ -259,7 +259,7 @@ static int basicUnitTests(U32 seed, double compressibility)
|
|||||||
DISPLAYLEVEL(4, "test%3i : Check input length for magic number : ", testNb++);
|
DISPLAYLEVEL(4, "test%3i : Check input length for magic number : ", testNb++);
|
||||||
result = ZSTD_decompress(decodedBuffer, COMPRESSIBLE_NOISE_LENGTH, CNBuffer, 3);
|
result = ZSTD_decompress(decodedBuffer, COMPRESSIBLE_NOISE_LENGTH, CNBuffer, 3);
|
||||||
if (!ZSTD_isError(result)) goto _output_error;
|
if (!ZSTD_isError(result)) goto _output_error;
|
||||||
if (result != ERROR(srcSize_wrong)) goto _output_error;
|
if (result != (size_t)-ZSTD_error_srcSize_wrong) goto _output_error;
|
||||||
DISPLAYLEVEL(4, "OK \n");
|
DISPLAYLEVEL(4, "OK \n");
|
||||||
|
|
||||||
DISPLAYLEVEL(4, "test%3i : Check magic Number : ", testNb++);
|
DISPLAYLEVEL(4, "test%3i : Check magic Number : ", testNb++);
|
||||||
|
Loading…
Reference in New Issue
Block a user