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