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