1*a28cd43dSSascha Wildner /* 2*a28cd43dSSascha Wildner * Copyright (c) 2016-2020, Facebook, Inc. 3*a28cd43dSSascha Wildner * All rights reserved. 4*a28cd43dSSascha Wildner * 5*a28cd43dSSascha Wildner * This source code is licensed under both the BSD-style license (found in the 6*a28cd43dSSascha Wildner * LICENSE file in the root directory of this source tree) and the GPLv2 (found 7*a28cd43dSSascha Wildner * in the COPYING file in the root directory of this source tree). 8*a28cd43dSSascha Wildner * You may select, at your option, one of the above-listed licenses. 9*a28cd43dSSascha Wildner */ 10*a28cd43dSSascha Wildner 11*a28cd43dSSascha Wildner /* This file provides common libc dependencies that zstd requires. 12*a28cd43dSSascha Wildner * The purpose is to allow replacing this file with a custom implementation 13*a28cd43dSSascha Wildner * to compile zstd without libc support. 14*a28cd43dSSascha Wildner */ 15*a28cd43dSSascha Wildner 16*a28cd43dSSascha Wildner /* Need: 17*a28cd43dSSascha Wildner * NULL 18*a28cd43dSSascha Wildner * INT_MAX 19*a28cd43dSSascha Wildner * UINT_MAX 20*a28cd43dSSascha Wildner * ZSTD_memcpy() 21*a28cd43dSSascha Wildner * ZSTD_memset() 22*a28cd43dSSascha Wildner * ZSTD_memmove() 23*a28cd43dSSascha Wildner */ 24*a28cd43dSSascha Wildner #ifndef ZSTD_DEPS_COMMON 25*a28cd43dSSascha Wildner #define ZSTD_DEPS_COMMON 26*a28cd43dSSascha Wildner 27*a28cd43dSSascha Wildner #include <limits.h> 28*a28cd43dSSascha Wildner #include <stddef.h> 29*a28cd43dSSascha Wildner #include <string.h> 30*a28cd43dSSascha Wildner 31*a28cd43dSSascha Wildner #if defined(__GNUC__) && __GNUC__ >= 4 32*a28cd43dSSascha Wildner # define ZSTD_memcpy(d,s,l) __builtin_memcpy((d),(s),(l)) 33*a28cd43dSSascha Wildner # define ZSTD_memmove(d,s,l) __builtin_memmove((d),(s),(l)) 34*a28cd43dSSascha Wildner # define ZSTD_memset(p,v,l) __builtin_memset((p),(v),(l)) 35*a28cd43dSSascha Wildner #else 36*a28cd43dSSascha Wildner # define ZSTD_memcpy(d,s,l) memcpy((d),(s),(l)) 37*a28cd43dSSascha Wildner # define ZSTD_memmove(d,s,l) memmove((d),(s),(l)) 38*a28cd43dSSascha Wildner # define ZSTD_memset(p,v,l) memset((p),(v),(l)) 39*a28cd43dSSascha Wildner #endif 40*a28cd43dSSascha Wildner 41*a28cd43dSSascha Wildner #endif /* ZSTD_DEPS_COMMON */ 42*a28cd43dSSascha Wildner 43*a28cd43dSSascha Wildner /* Need: 44*a28cd43dSSascha Wildner * ZSTD_malloc() 45*a28cd43dSSascha Wildner * ZSTD_free() 46*a28cd43dSSascha Wildner * ZSTD_calloc() 47*a28cd43dSSascha Wildner */ 48*a28cd43dSSascha Wildner #ifdef ZSTD_DEPS_NEED_MALLOC 49*a28cd43dSSascha Wildner #ifndef ZSTD_DEPS_MALLOC 50*a28cd43dSSascha Wildner #define ZSTD_DEPS_MALLOC 51*a28cd43dSSascha Wildner 52*a28cd43dSSascha Wildner #include <stdlib.h> 53*a28cd43dSSascha Wildner 54*a28cd43dSSascha Wildner #define ZSTD_malloc(s) malloc(s) 55*a28cd43dSSascha Wildner #define ZSTD_calloc(n,s) calloc((n), (s)) 56*a28cd43dSSascha Wildner #define ZSTD_free(p) free((p)) 57*a28cd43dSSascha Wildner 58*a28cd43dSSascha Wildner #endif /* ZSTD_DEPS_MALLOC */ 59*a28cd43dSSascha Wildner #endif /* ZSTD_DEPS_NEED_MALLOC */ 60*a28cd43dSSascha Wildner 61*a28cd43dSSascha Wildner /* 62*a28cd43dSSascha Wildner * Provides 64-bit math support. 63*a28cd43dSSascha Wildner * Need: 64*a28cd43dSSascha Wildner * U64 ZSTD_div64(U64 dividend, U32 divisor) 65*a28cd43dSSascha Wildner */ 66*a28cd43dSSascha Wildner #ifdef ZSTD_DEPS_NEED_MATH64 67*a28cd43dSSascha Wildner #ifndef ZSTD_DEPS_MATH64 68*a28cd43dSSascha Wildner #define ZSTD_DEPS_MATH64 69*a28cd43dSSascha Wildner 70*a28cd43dSSascha Wildner #define ZSTD_div64(dividend, divisor) ((dividend) / (divisor)) 71*a28cd43dSSascha Wildner 72*a28cd43dSSascha Wildner #endif /* ZSTD_DEPS_MATH64 */ 73*a28cd43dSSascha Wildner #endif /* ZSTD_DEPS_NEED_MATH64 */ 74*a28cd43dSSascha Wildner 75*a28cd43dSSascha Wildner /* Need: 76*a28cd43dSSascha Wildner * assert() 77*a28cd43dSSascha Wildner */ 78*a28cd43dSSascha Wildner #ifdef ZSTD_DEPS_NEED_ASSERT 79*a28cd43dSSascha Wildner #ifndef ZSTD_DEPS_ASSERT 80*a28cd43dSSascha Wildner #define ZSTD_DEPS_ASSERT 81*a28cd43dSSascha Wildner 82*a28cd43dSSascha Wildner #include <assert.h> 83*a28cd43dSSascha Wildner 84*a28cd43dSSascha Wildner #endif /* ZSTD_DEPS_ASSERT */ 85*a28cd43dSSascha Wildner #endif /* ZSTD_DEPS_NEED_ASSERT */ 86*a28cd43dSSascha Wildner 87*a28cd43dSSascha Wildner /* Need: 88*a28cd43dSSascha Wildner * ZSTD_DEBUG_PRINT() 89*a28cd43dSSascha Wildner */ 90*a28cd43dSSascha Wildner #ifdef ZSTD_DEPS_NEED_IO 91*a28cd43dSSascha Wildner #ifndef ZSTD_DEPS_IO 92*a28cd43dSSascha Wildner #define ZSTD_DEPS_IO 93*a28cd43dSSascha Wildner 94*a28cd43dSSascha Wildner #include <stdio.h> 95*a28cd43dSSascha Wildner #define ZSTD_DEBUG_PRINT(...) fprintf(stderr, __VA_ARGS__) 96*a28cd43dSSascha Wildner 97*a28cd43dSSascha Wildner #endif /* ZSTD_DEPS_IO */ 98*a28cd43dSSascha Wildner #endif /* ZSTD_DEPS_NEED_IO */ 99*a28cd43dSSascha Wildner 100*a28cd43dSSascha Wildner /* Only requested when <stdint.h> is known to be present. 101*a28cd43dSSascha Wildner * Need: 102*a28cd43dSSascha Wildner * intptr_t 103*a28cd43dSSascha Wildner */ 104*a28cd43dSSascha Wildner #ifdef ZSTD_DEPS_NEED_STDINT 105*a28cd43dSSascha Wildner #ifndef ZSTD_DEPS_STDINT 106*a28cd43dSSascha Wildner #define ZSTD_DEPS_STDINT 107*a28cd43dSSascha Wildner 108*a28cd43dSSascha Wildner #include <stdint.h> 109*a28cd43dSSascha Wildner 110*a28cd43dSSascha Wildner #endif /* ZSTD_DEPS_STDINT */ 111*a28cd43dSSascha Wildner #endif /* ZSTD_DEPS_NEED_STDINT */ 112