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