Updated error API, following suggestions by @nemequ (#116)
This commit is contained in:
+34
-26
@@ -40,14 +40,14 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* *****************************************
|
/* ****************************************
|
||||||
* Includes
|
* Dependencies
|
||||||
******************************************/
|
******************************************/
|
||||||
#include <stddef.h> /* size_t, ptrdiff_t */
|
#include <stddef.h> /* size_t */
|
||||||
#include "error_public.h" /* enum list */
|
#include "error_public.h" /* enum list */
|
||||||
|
|
||||||
|
|
||||||
/* *****************************************
|
/* ****************************************
|
||||||
* Compiler-specific
|
* Compiler-specific
|
||||||
******************************************/
|
******************************************/
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
@@ -61,44 +61,52 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* *****************************************
|
/*-****************************************
|
||||||
* Error Codes
|
* Customization
|
||||||
******************************************/
|
******************************************/
|
||||||
|
typedef ZSTD_errorCode ERR_enum;
|
||||||
#define PREFIX(name) ZSTD_error_##name
|
#define PREFIX(name) ZSTD_error_##name
|
||||||
|
|
||||||
|
|
||||||
|
/*-****************************************
|
||||||
|
* Error codes handling
|
||||||
|
******************************************/
|
||||||
#ifdef ERROR
|
#ifdef ERROR
|
||||||
# undef ERROR /* reported already defined on VS 2015 by Rich Geldreich */
|
# undef ERROR /* reported already defined on VS 2015 (Rich Geldreich) */
|
||||||
#endif
|
#endif
|
||||||
#define ERROR(name) (size_t)-PREFIX(name)
|
#define ERROR(name) (size_t)-PREFIX(name)
|
||||||
|
|
||||||
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
|
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
|
* 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* notErrorCode = "Unspecified error code";
|
||||||
switch( (size_t)(0-code) )
|
switch( ERR_getError(code) )
|
||||||
{
|
{
|
||||||
case ZSTD_error_No_Error: return "No error detected";
|
case PREFIX(no_error): return "No error detected";
|
||||||
case ZSTD_error_GENERIC: return "Error (generic)";
|
case PREFIX(GENERIC): return "Error (generic)";
|
||||||
case ZSTD_error_prefix_unknown: return "Unknown frame descriptor";
|
case PREFIX(prefix_unknown): return "Unknown frame descriptor";
|
||||||
case ZSTD_error_frameParameter_unsupported: return "Unsupported frame parameter";
|
case PREFIX(frameParameter_unsupported): return "Unsupported frame parameter";
|
||||||
case ZSTD_error_frameParameter_unsupportedBy32bitsImplementation: return "Frame parameter unsupported in 32-bits mode";
|
case PREFIX(frameParameter_unsupportedBy32bits): return "Frame parameter unsupported in 32-bits mode";
|
||||||
case ZSTD_error_init_missing: return "Context should be init first";
|
case PREFIX(init_missing): return "Context should be init first";
|
||||||
case ZSTD_error_memory_allocation: return "Allocation error : not enough memory";
|
case PREFIX(memory_allocation): return "Allocation error : not enough memory";
|
||||||
case ZSTD_error_dstSize_tooSmall: return "Destination buffer is too small";
|
case PREFIX(stage_wrong): return "Operation not authorized at current processing stage";
|
||||||
case ZSTD_error_srcSize_wrong: return "Src size incorrect";
|
case PREFIX(dstSize_tooSmall): return "Destination buffer is too small";
|
||||||
case ZSTD_error_corruption_detected: return "Corrupted block detected";
|
case PREFIX(srcSize_wrong): return "Src size incorrect";
|
||||||
case ZSTD_error_tableLog_tooLarge: return "tableLog requires too much memory";
|
case PREFIX(corruption_detected): return "Corrupted block detected";
|
||||||
case ZSTD_error_maxSymbolValue_tooLarge: return "Unsupported max possible Symbol Value : too large";
|
case PREFIX(tableLog_tooLarge): return "tableLog requires too much memory";
|
||||||
case ZSTD_error_maxSymbolValue_tooSmall: return "Specified maxSymbolValue is too small";
|
case PREFIX(maxSymbolValue_tooLarge): return "Unsupported max possible Symbol Value : too large";
|
||||||
case ZSTD_error_dictionary_corrupted: return "Dictionary is corrupted";
|
case PREFIX(maxSymbolValue_tooSmall): return "Specified maxSymbolValue is too small";
|
||||||
case ZSTD_error_maxCode:
|
case PREFIX(dictionary_corrupted): return "Dictionary is corrupted";
|
||||||
default: return codeError;
|
case PREFIX(maxCode):
|
||||||
|
default: return notErrorCode; /* should be impossible, due to ERR_getError() */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -39,14 +39,14 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* ****************************************
|
/* ****************************************
|
||||||
* error list
|
* error codes list
|
||||||
******************************************/
|
******************************************/
|
||||||
enum {
|
typedef enum {
|
||||||
ZSTD_error_No_Error,
|
ZSTD_error_no_error,
|
||||||
ZSTD_error_GENERIC,
|
ZSTD_error_GENERIC,
|
||||||
ZSTD_error_prefix_unknown,
|
ZSTD_error_prefix_unknown,
|
||||||
ZSTD_error_frameParameter_unsupported,
|
ZSTD_error_frameParameter_unsupported,
|
||||||
ZSTD_error_frameParameter_unsupportedBy32bitsImplementation,
|
ZSTD_error_frameParameter_unsupportedBy32bits,
|
||||||
ZSTD_error_init_missing,
|
ZSTD_error_init_missing,
|
||||||
ZSTD_error_memory_allocation,
|
ZSTD_error_memory_allocation,
|
||||||
ZSTD_error_stage_wrong,
|
ZSTD_error_stage_wrong,
|
||||||
@@ -58,7 +58,7 @@ enum {
|
|||||||
ZSTD_error_maxSymbolValue_tooSmall,
|
ZSTD_error_maxSymbolValue_tooSmall,
|
||||||
ZSTD_error_dictionary_corrupted,
|
ZSTD_error_dictionary_corrupted,
|
||||||
ZSTD_error_maxCode
|
ZSTD_error_maxCode
|
||||||
};
|
} ZSTD_errorCode;
|
||||||
|
|
||||||
/* note : functions provide error codes in reverse negative order,
|
/* note : functions provide error codes in reverse negative order,
|
||||||
so compare with (size_t)(0-enum) */
|
so compare with (size_t)(0-enum) */
|
||||||
|
|||||||
@@ -109,6 +109,10 @@ unsigned ZSTD_versionNumber (void) { return ZSTD_VERSION_NUMBER; }
|
|||||||
* tells if a return value is an error code */
|
* tells if a return value is an error code */
|
||||||
unsigned ZSTD_isError(size_t code) { return ERR_isError(code); }
|
unsigned ZSTD_isError(size_t code) { return ERR_isError(code); }
|
||||||
|
|
||||||
|
/*! ZSTD_getError
|
||||||
|
* convert a `size_t` function result into a proper ZSTD_errorCode enum */
|
||||||
|
ZSTD_errorCode ZSTD_getError(size_t code) { return ERR_getError(code); }
|
||||||
|
|
||||||
/*! ZSTD_getErrorName
|
/*! ZSTD_getErrorName
|
||||||
* provides error code string (useful for debugging) */
|
* provides error code string (useful for debugging) */
|
||||||
const char* ZSTD_getErrorName(size_t code) { return ERR_getErrorName(code); }
|
const char* ZSTD_getErrorName(size_t code) { return ERR_getErrorName(code); }
|
||||||
@@ -302,7 +306,7 @@ static size_t ZSTD_decodeFrameHeader_Part2(ZSTD_DCtx* zc, const void* src, size_
|
|||||||
if (srcSize != zc->headerSize)
|
if (srcSize != zc->headerSize)
|
||||||
return ERROR(srcSize_wrong);
|
return ERROR(srcSize_wrong);
|
||||||
result = ZSTD_getFrameParams(&(zc->params), src, srcSize);
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -229,6 +229,10 @@ size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, cons
|
|||||||
* Error management
|
* Error management
|
||||||
***************************************/
|
***************************************/
|
||||||
#include "error_public.h"
|
#include "error_public.h"
|
||||||
|
/*! ZSTD_getErrorCode
|
||||||
|
transform a function result using `size_t` into a `ZSTD_error_code` enum type
|
||||||
|
which can be used to compare directly with enum list within "error_public.h" */
|
||||||
|
ZSTD_errorCode ZSTD_getError(size_t code);
|
||||||
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
#if defined (__cplusplus)
|
||||||
|
|||||||
Reference in New Issue
Block a user