| /* | |
| * Copyright (c) Yann Collet, Facebook, Inc. | |
| * All rights reserved. | |
| * | |
| * This source code is licensed under both the BSD-style license (found in the | |
| * LICENSE file in the root directory of this source tree) and the GPLv2 (found | |
| * in the COPYING file in the root directory of this source tree). | |
| * You may select, at your option, one of the above-listed licenses. | |
| */ | |
| /*-************************************* | |
| * Dependencies | |
| ***************************************/ | |
| #define ZSTD_DEPS_NEED_MALLOC | |
| #include "zstd_deps.h" /* ZSTD_malloc, ZSTD_calloc, ZSTD_free, ZSTD_memset */ | |
| #include "error_private.h" | |
| #include "zstd_internal.h" | |
| /*-**************************************** | |
| * Version | |
| ******************************************/ | |
| unsigned ZSTD_versionNumber(void) { return ZSTD_VERSION_NUMBER; } | |
| const char* ZSTD_versionString(void) { return ZSTD_VERSION_STRING; } | |
| /*-**************************************** | |
| * ZSTD Error Management | |
| ******************************************/ | |
| #undef ZSTD_isError /* defined within zstd_internal.h */ | |
| /*! ZSTD_isError() : | |
| * tells if a return value is an error code | |
| * symbol is required for external callers */ | |
| unsigned ZSTD_isError(size_t code) { return ERR_isError(code); } | |
| /*! ZSTD_getErrorName() : | |
| * provides error code string from function result (useful for debugging) */ | |
| const char* ZSTD_getErrorName(size_t code) { return ERR_getErrorName(code); } | |
| /*! ZSTD_getError() : | |
| * convert a `size_t` function result into a proper ZSTD_errorCode enum */ | |
| ZSTD_ErrorCode ZSTD_getErrorCode(size_t code) { return ERR_getErrorCode(code); } | |
| /*! ZSTD_getErrorString() : | |
| * provides error code string from enum */ | |
| const char* ZSTD_getErrorString(ZSTD_ErrorCode code) { return ERR_getErrorString(code); } | |
| /*=************************************************************** | |
| * Custom allocator | |
| ****************************************************************/ | |
| void* ZSTD_customMalloc(size_t size, ZSTD_customMem customMem) | |
| { | |
| if (customMem.customAlloc) | |
| return customMem.customAlloc(customMem.opaque, size); | |
| return ZSTD_malloc(size); | |
| } | |
| void* ZSTD_customCalloc(size_t size, ZSTD_customMem customMem) | |
| { | |
| if (customMem.customAlloc) { | |
| /* calloc implemented as malloc+memset; | |
| * not as efficient as calloc, but next best guess for custom malloc */ | |
| void* const ptr = customMem.customAlloc(customMem.opaque, size); | |
| ZSTD_memset(ptr, 0, size); | |
| return ptr; | |
| } | |
| return ZSTD_calloc(1, size); | |
| } | |
| void ZSTD_customFree(void* ptr, ZSTD_customMem customMem) | |
| { | |
| if (ptr!=NULL) { | |
| if (customMem.customFree) | |
| customMem.customFree(customMem.opaque, ptr); | |
| else | |
| ZSTD_free(ptr); | |
| } | |
| } |