17 #ifndef CMOCKA_PRIVATE_H_ 18 #define CMOCKA_PRIVATE_H_ 24 #ifndef CMOCKA_NO_STANDARD_INCLUDES 36 # define inline __inline 39 # define va_copy(dest, src) (dest = src) 42 # define strcasecmp _stricmp 43 # define strncasecmp _strnicmp 44 # define strtok_r strtok_s 45 # define strdup _strdup 47 # if defined(HAVE__SNPRINTF_S) 49 # define snprintf(d, n, ...) _snprintf_s((d), (n), _TRUNCATE, __VA_ARGS__) 51 # if defined(HAVE__SNPRINTF) 53 # define snprintf _snprintf 55 # if !defined(HAVE_SNPRINTF) 56 # error "no snprintf compatible function found" 61 # if defined(HAVE__VSNPRINTF_S) 63 # define vsnprintf(s, n, f, v) _vsnprintf_s((s), (n), _TRUNCATE, (f), (v)) 65 # if defined(HAVE__VSNPRINTF) 67 # define vsnprintf _vsnprintf 69 # if !defined(HAVE_VSNPRINTF) 70 # error "No vsnprintf compatible function found" 81 # define PRIu64 "I64u" 85 # define PRIuMAX PRIu64 89 #define PRIxMAX "I64x" 93 #define PRIXMAX "I64X" 98 #define PATH_MAX MAX_PATH 106 #ifndef __PRI64_PREFIX 107 # if __WORDSIZE == 64 108 # define __PRI64_PREFIX "l" 110 # define __PRI64_PREFIX "ll" 119 # define PRIu64 __PRI64_PREFIX "u" 123 # define PRIuMAX __PRI64_PREFIX "u" 127 #define PRIxMAX __PRI64_PREFIX "x" 131 #define PRIXMAX __PRI64_PREFIX "X" 137 #define SAFE_FREE(x) do { if ((x) != NULL) {free(x); x=NULL;} } while(0) 140 #define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x)) 143 #define ZERO_STRUCTP(x) do { if ((x) != NULL) memset((char *)(x), 0, sizeof(*(x))); } while(0) 146 #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) 149 #define BURN_STRING(x) do { if ((x) != NULL) memset((x), 'X', strlen((x))); } while(0) 163 #define discard_const(ptr) ((void *)((uintptr_t)(ptr))) 168 #define discard_const_p(type, ptr) ((type *)discard_const(ptr)) 173 # if defined(__GNUC__) || defined(__clang__) 174 # define INFINITY __builtin_inff() 176 # define INFINITY ((float)(1e+300 * 1e+300)) 181 # if defined(__GNUC__) || defined(__clang__) 182 # define NAN __builtin_nanf("") 184 # define NAN ((float)(INFINITY * 0.0f)) 189 static inline int cmocka_isnan(
double x) {
190 union {
double d; uint64_t i; } u;
193 return ((u.i & 0x7FF0000000000000ULL) == 0x7FF0000000000000ULL) &&
194 ((u.i & 0x000FFFFFFFFFFFFFULL) != 0);
196 # define isnan(x) cmocka_isnan(x) 200 static inline int cmocka_isinf(
double x) {
201 union {
double d; uint64_t i; } u;
204 return ((u.i & 0x7FF0000000000000ULL) == 0x7FF0000000000000ULL) &&
205 ((u.i & 0x000FFFFFFFFFFFFFULL) == 0);
207 # define isinf(x) cmocka_isinf(x)