1*c03c5b1cSMartin Matuska /* 2*c03c5b1cSMartin Matuska * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. 3*c03c5b1cSMartin Matuska * All rights reserved. 4*c03c5b1cSMartin Matuska * 5*c03c5b1cSMartin Matuska * This source code is licensed under both the BSD-style license (found in the 6*c03c5b1cSMartin Matuska * LICENSE file in the root directory of this source tree) and the GPLv2 (found 7*c03c5b1cSMartin Matuska * in the COPYING file in the root directory of this source tree). 8*c03c5b1cSMartin Matuska * You may select, at your option, one of the above-listed licenses. 9*c03c5b1cSMartin Matuska */ 10*c03c5b1cSMartin Matuska 11*c03c5b1cSMartin Matuska /* Note : this module is expected to remain private, do not expose it */ 12*c03c5b1cSMartin Matuska 13*c03c5b1cSMartin Matuska #ifndef ERROR_H_MODULE 14*c03c5b1cSMartin Matuska #define ERROR_H_MODULE 15*c03c5b1cSMartin Matuska 16*c03c5b1cSMartin Matuska #if defined (__cplusplus) 17*c03c5b1cSMartin Matuska extern "C" { 18*c03c5b1cSMartin Matuska #endif 19*c03c5b1cSMartin Matuska 20*c03c5b1cSMartin Matuska 21*c03c5b1cSMartin Matuska /* **************************************** 22*c03c5b1cSMartin Matuska * Dependencies 23*c03c5b1cSMartin Matuska ******************************************/ 24*c03c5b1cSMartin Matuska #include <stddef.h> /* size_t */ 25*c03c5b1cSMartin Matuska #include "zstd_errors.h" /* enum list */ 26*c03c5b1cSMartin Matuska 27*c03c5b1cSMartin Matuska 28*c03c5b1cSMartin Matuska /* **************************************** 29*c03c5b1cSMartin Matuska * Compiler-specific 30*c03c5b1cSMartin Matuska ******************************************/ 31*c03c5b1cSMartin Matuska #if defined(__GNUC__) 32*c03c5b1cSMartin Matuska # define ERR_STATIC static __attribute__((unused)) 33*c03c5b1cSMartin Matuska #elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) 34*c03c5b1cSMartin Matuska # define ERR_STATIC static inline 35*c03c5b1cSMartin Matuska #elif defined(_MSC_VER) 36*c03c5b1cSMartin Matuska # define ERR_STATIC static __inline 37*c03c5b1cSMartin Matuska #else 38*c03c5b1cSMartin Matuska # define ERR_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */ 39*c03c5b1cSMartin Matuska #endif 40*c03c5b1cSMartin Matuska 41*c03c5b1cSMartin Matuska 42*c03c5b1cSMartin Matuska /*-**************************************** 43*c03c5b1cSMartin Matuska * Customization (error_public.h) 44*c03c5b1cSMartin Matuska ******************************************/ 45*c03c5b1cSMartin Matuska typedef ZSTD_ErrorCode ERR_enum; 46*c03c5b1cSMartin Matuska #define PREFIX(name) ZSTD_error_##name 47*c03c5b1cSMartin Matuska 48*c03c5b1cSMartin Matuska 49*c03c5b1cSMartin Matuska /*-**************************************** 50*c03c5b1cSMartin Matuska * Error codes handling 51*c03c5b1cSMartin Matuska ******************************************/ 52*c03c5b1cSMartin Matuska #undef ERROR /* already defined on Visual Studio */ 53*c03c5b1cSMartin Matuska #define ERROR(name) ZSTD_ERROR(name) 54*c03c5b1cSMartin Matuska #define ZSTD_ERROR(name) ((size_t)-PREFIX(name)) 55*c03c5b1cSMartin Matuska ERR_isError(size_t code)56*c03c5b1cSMartin MatuskaERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); } 57*c03c5b1cSMartin Matuska ERR_getErrorCode(size_t code)58*c03c5b1cSMartin MatuskaERR_STATIC ERR_enum ERR_getErrorCode(size_t code) { if (!ERR_isError(code)) return (ERR_enum)0; return (ERR_enum) (0-code); } 59*c03c5b1cSMartin Matuska 60*c03c5b1cSMartin Matuska /* check and forward error code */ 61*c03c5b1cSMartin Matuska #define CHECK_V_F(e, f) size_t const e = f; if (ERR_isError(e)) return e 62*c03c5b1cSMartin Matuska #define CHECK_F(f) { CHECK_V_F(_var_err__, f); } 63*c03c5b1cSMartin Matuska 64*c03c5b1cSMartin Matuska 65*c03c5b1cSMartin Matuska /*-**************************************** 66*c03c5b1cSMartin Matuska * Error Strings 67*c03c5b1cSMartin Matuska ******************************************/ 68*c03c5b1cSMartin Matuska 69*c03c5b1cSMartin Matuska const char* ERR_getErrorString(ERR_enum code); /* error_private.c */ 70*c03c5b1cSMartin Matuska ERR_getErrorName(size_t code)71*c03c5b1cSMartin MatuskaERR_STATIC const char* ERR_getErrorName(size_t code) 72*c03c5b1cSMartin Matuska { 73*c03c5b1cSMartin Matuska return ERR_getErrorString(ERR_getErrorCode(code)); 74*c03c5b1cSMartin Matuska } 75*c03c5b1cSMartin Matuska 76*c03c5b1cSMartin Matuska #if defined (__cplusplus) 77*c03c5b1cSMartin Matuska } 78*c03c5b1cSMartin Matuska #endif 79*c03c5b1cSMartin Matuska 80*c03c5b1cSMartin Matuska #endif /* ERROR_H_MODULE */ 81