xref: /freebsd-src/sys/contrib/openzfs/module/zstd/lib/common/zstd_common.c (revision c03c5b1c80914ec656fbee84539355d1fad68bf9)
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 
12*c03c5b1cSMartin Matuska 
13*c03c5b1cSMartin Matuska /*-*************************************
14*c03c5b1cSMartin Matuska *  Dependencies
15*c03c5b1cSMartin Matuska ***************************************/
16*c03c5b1cSMartin Matuska #include <stdlib.h>      /* malloc, calloc, free */
17*c03c5b1cSMartin Matuska #include <string.h>      /* memset */
18*c03c5b1cSMartin Matuska #include "error_private.h"
19*c03c5b1cSMartin Matuska #include "zstd_internal.h"
20*c03c5b1cSMartin Matuska 
21*c03c5b1cSMartin Matuska 
22*c03c5b1cSMartin Matuska /*-****************************************
23*c03c5b1cSMartin Matuska *  Version
24*c03c5b1cSMartin Matuska ******************************************/
ZSTD_versionNumber(void)25*c03c5b1cSMartin Matuska unsigned ZSTD_versionNumber(void) { return ZSTD_VERSION_NUMBER; }
26*c03c5b1cSMartin Matuska 
ZSTD_versionString(void)27*c03c5b1cSMartin Matuska const char* ZSTD_versionString(void) { return ZSTD_VERSION_STRING; }
28*c03c5b1cSMartin Matuska 
29*c03c5b1cSMartin Matuska 
30*c03c5b1cSMartin Matuska /*-****************************************
31*c03c5b1cSMartin Matuska *  ZSTD Error Management
32*c03c5b1cSMartin Matuska ******************************************/
33*c03c5b1cSMartin Matuska 
34*c03c5b1cSMartin Matuska /*! ZSTD_isError() :
35*c03c5b1cSMartin Matuska  *  tells if a return value is an error code
36*c03c5b1cSMartin Matuska  *  symbol is required for external callers */
ZSTD_isError(size_t code)37*c03c5b1cSMartin Matuska unsigned ZSTD_isError(size_t code) { return ERR_isError(code); }
38*c03c5b1cSMartin Matuska 
39*c03c5b1cSMartin Matuska /*! ZSTD_getErrorName() :
40*c03c5b1cSMartin Matuska  *  provides error code string from function result (useful for debugging) */
ZSTD_getErrorName(size_t code)41*c03c5b1cSMartin Matuska const char* ZSTD_getErrorName(size_t code) { return ERR_getErrorName(code); }
42*c03c5b1cSMartin Matuska 
43*c03c5b1cSMartin Matuska /*! ZSTD_getError() :
44*c03c5b1cSMartin Matuska  *  convert a `size_t` function result into a proper ZSTD_errorCode enum */
ZSTD_getErrorCode(size_t code)45*c03c5b1cSMartin Matuska ZSTD_ErrorCode ZSTD_getErrorCode(size_t code) { return ERR_getErrorCode(code); }
46*c03c5b1cSMartin Matuska 
47*c03c5b1cSMartin Matuska /*! ZSTD_getErrorString() :
48*c03c5b1cSMartin Matuska  *  provides error code string from enum */
ZSTD_getErrorString(ZSTD_ErrorCode code)49*c03c5b1cSMartin Matuska const char* ZSTD_getErrorString(ZSTD_ErrorCode code) { return ERR_getErrorString(code); }
50*c03c5b1cSMartin Matuska 
51*c03c5b1cSMartin Matuska 
52*c03c5b1cSMartin Matuska 
53*c03c5b1cSMartin Matuska /*=**************************************************************
54*c03c5b1cSMartin Matuska *  Custom allocator
55*c03c5b1cSMartin Matuska ****************************************************************/
ZSTD_malloc(size_t size,ZSTD_customMem customMem)56*c03c5b1cSMartin Matuska void* ZSTD_malloc(size_t size, ZSTD_customMem customMem)
57*c03c5b1cSMartin Matuska {
58*c03c5b1cSMartin Matuska     if (customMem.customAlloc)
59*c03c5b1cSMartin Matuska         return customMem.customAlloc(customMem.opaque, size);
60*c03c5b1cSMartin Matuska     return malloc(size);
61*c03c5b1cSMartin Matuska }
62*c03c5b1cSMartin Matuska 
ZSTD_calloc(size_t size,ZSTD_customMem customMem)63*c03c5b1cSMartin Matuska void* ZSTD_calloc(size_t size, ZSTD_customMem customMem)
64*c03c5b1cSMartin Matuska {
65*c03c5b1cSMartin Matuska     if (customMem.customAlloc) {
66*c03c5b1cSMartin Matuska         /* calloc implemented as malloc+memset;
67*c03c5b1cSMartin Matuska          * not as efficient as calloc, but next best guess for custom malloc */
68*c03c5b1cSMartin Matuska         void* const ptr = customMem.customAlloc(customMem.opaque, size);
69*c03c5b1cSMartin Matuska         memset(ptr, 0, size);
70*c03c5b1cSMartin Matuska         return ptr;
71*c03c5b1cSMartin Matuska     }
72*c03c5b1cSMartin Matuska     return calloc(1, size);
73*c03c5b1cSMartin Matuska }
74*c03c5b1cSMartin Matuska 
ZSTD_free(void * ptr,ZSTD_customMem customMem)75*c03c5b1cSMartin Matuska void ZSTD_free(void* ptr, ZSTD_customMem customMem)
76*c03c5b1cSMartin Matuska {
77*c03c5b1cSMartin Matuska     if (ptr!=NULL) {
78*c03c5b1cSMartin Matuska         if (customMem.customFree)
79*c03c5b1cSMartin Matuska             customMem.customFree(customMem.opaque, ptr);
80*c03c5b1cSMartin Matuska         else
81*c03c5b1cSMartin Matuska             free(ptr);
82*c03c5b1cSMartin Matuska     }
83*c03c5b1cSMartin Matuska }
84