1 #ifndef JEMALLOC_INTERNAL_UTIL_H 2 #define JEMALLOC_INTERNAL_UTIL_H 3 4 #define UTIL_INLINE static inline 5 6 /* Junk fill patterns. */ 7 #ifndef JEMALLOC_ALLOC_JUNK 8 # define JEMALLOC_ALLOC_JUNK ((uint8_t)0xa5) 9 #endif 10 #ifndef JEMALLOC_FREE_JUNK 11 # define JEMALLOC_FREE_JUNK ((uint8_t)0x5a) 12 #endif 13 14 /* 15 * Wrap a cpp argument that contains commas such that it isn't broken up into 16 * multiple arguments. 17 */ 18 #define JEMALLOC_ARG_CONCAT(...) __VA_ARGS__ 19 20 /* cpp macro definition stringification. */ 21 #define STRINGIFY_HELPER(x) #x 22 #define STRINGIFY(x) STRINGIFY_HELPER(x) 23 24 /* 25 * Silence compiler warnings due to uninitialized values. This is used 26 * wherever the compiler fails to recognize that the variable is never used 27 * uninitialized. 28 */ 29 #define JEMALLOC_CC_SILENCE_INIT(v) = v 30 31 #ifdef __GNUC__ 32 # define likely(x) __builtin_expect(!!(x), 1) 33 # define unlikely(x) __builtin_expect(!!(x), 0) 34 #else 35 # define likely(x) !!(x) 36 # define unlikely(x) !!(x) 37 #endif 38 39 #if !defined(JEMALLOC_INTERNAL_UNREACHABLE) 40 # error JEMALLOC_INTERNAL_UNREACHABLE should have been defined by configure 41 #endif 42 43 #define unreachable() JEMALLOC_INTERNAL_UNREACHABLE() 44 45 /* Set error code. */ 46 UTIL_INLINE void set_errno(int errnum)47set_errno(int errnum) { 48 #ifdef _WIN32 49 SetLastError(errnum); 50 #else 51 errno = errnum; 52 #endif 53 } 54 55 /* Get last error code. */ 56 UTIL_INLINE int get_errno(void)57get_errno(void) { 58 #ifdef _WIN32 59 return GetLastError(); 60 #else 61 return errno; 62 #endif 63 } 64 65 #undef UTIL_INLINE 66 67 #endif /* JEMALLOC_INTERNAL_UTIL_H */ 68