1 /* 2 * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. 3 * All rights reserved. 4 * 5 * This source code is licensed under both the BSD-style license (found in the 6 * LICENSE file in the root directory of this source tree) and the GPLv2 (found 7 * in the COPYING file in the root directory of this source tree). 8 * You may select, at your option, one of the above-listed licenses. 9 */ 10 11 12 13 /*-************************************* 14 * Dependencies 15 ***************************************/ 16 #include <stdlib.h> /* malloc, calloc, free */ 17 #include <string.h> /* memset */ 18 #include "error_private.h" 19 #include "zstd_internal.h" 20 21 22 /*-**************************************** 23 * Version 24 ******************************************/ 25 unsigned ZSTD_versionNumber(void) { return ZSTD_VERSION_NUMBER; } 26 27 const char* ZSTD_versionString(void) { return ZSTD_VERSION_STRING; } 28 29 30 /*-**************************************** 31 * ZSTD Error Management 32 ******************************************/ 33 /*! ZSTD_isError() : 34 * tells if a return value is an error code */ 35 unsigned ZSTD_isError(size_t code) { return ERR_isError(code); } 36 37 /*! ZSTD_getErrorName() : 38 * provides error code string from function result (useful for debugging) */ 39 const char* ZSTD_getErrorName(size_t code) { return ERR_getErrorName(code); } 40 41 /*! ZSTD_getError() : 42 * convert a `size_t` function result into a proper ZSTD_errorCode enum */ 43 ZSTD_ErrorCode ZSTD_getErrorCode(size_t code) { return ERR_getErrorCode(code); } 44 45 /*! ZSTD_getErrorString() : 46 * provides error code string from enum */ 47 const char* ZSTD_getErrorString(ZSTD_ErrorCode code) { return ERR_getErrorString(code); } 48 49 50 51 /*=************************************************************** 52 * Custom allocator 53 ****************************************************************/ 54 void* ZSTD_malloc(size_t size, ZSTD_customMem customMem) 55 { 56 if (customMem.customAlloc) 57 return customMem.customAlloc(customMem.opaque, size); 58 return malloc(size); 59 } 60 61 void* ZSTD_calloc(size_t size, ZSTD_customMem customMem) 62 { 63 if (customMem.customAlloc) { 64 /* calloc implemented as malloc+memset; 65 * not as efficient as calloc, but next best guess for custom malloc */ 66 void* const ptr = customMem.customAlloc(customMem.opaque, size); 67 memset(ptr, 0, size); 68 return ptr; 69 } 70 return calloc(1, size); 71 } 72 73 void ZSTD_free(void* ptr, ZSTD_customMem customMem) 74 { 75 if (ptr!=NULL) { 76 if (customMem.customFree) 77 customMem.customFree(customMem.opaque, ptr); 78 else 79 free(ptr); 80 } 81 } 82