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