21 #ifndef _tdsguard_dWrEWKe6Aqdq6AyZsaKD0V_ 22 #define _tdsguard_dWrEWKe6Aqdq6AyZsaKD0V_ 24 #ifndef _freetds_config_h_ 25 #error should include config.h before 32 #define TDS_ZERO_FREE(x) do {free((x)); (x) = NULL;} while(0) 33 #define TDS_VECTOR_SIZE(x) (sizeof(x)/sizeof(x[0])) 36 #define TDS_OFFSET(type, field) offsetof(type, field) 38 #define TDS_OFFSET(type, field) (((char*)&((type*)0)->field)-((char*)0)) 41 #if ENABLE_EXTRA_CHECKS 42 # define TDS_EXTRA_CHECK(stmt) stmt 44 # define TDS_EXTRA_CHECK(stmt) 47 # if defined(__llvm__) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))) 48 # define TDS_COMPILE_CHECK(name,check) \ 49 _Static_assert(check,#name) 51 # define TDS_COMPILE_CHECK(name,check) \ 52 typedef char _tds_check_##name[(check)?1:-1] TDS_UNUSED 55 #if defined(__GNUC__) && __GNUC__ >= 3 56 # define TDS_LIKELY(x) __builtin_expect(!!(x), 1) 57 # define TDS_UNLIKELY(x) __builtin_expect(!!(x), 0) 59 # define TDS_LIKELY(x) (x) 60 # define TDS_UNLIKELY(x) (x) 63 #if ENABLE_EXTRA_CHECKS && defined(__GNUC__) && __GNUC__ >= 4 64 #define TDS_WUR __attribute__ ((__warn_unused_result__)) 69 #if defined(__GNUC__) && __GNUC__ >= 2 70 #define TDS_UNUSED __attribute__ ((unused)) 75 #define TDS_INT2PTR(i) ((void*)(((char*)0)+((ptrdiff_t)(i)))) 76 #define TDS_PTR2INT(p) ((int)(((char*)(p))-((char*)0))) 78 #define TDS_MAX(a,b) ( (a) > (b) ? (a) : (b) ) 79 #define TDS_MIN(a,b) ( (a) < (b) ? (a) : (b) ) 80 #define TDS_CLAMP(x,a,b) ( (x) < (a) ? (a) : (x) > (b) ? (b) : (x) ) 82 #define tds_new(type, n) ((type *) malloc(sizeof(type) * (n))) 83 #define tds_new0(type, n) ((type *) calloc(n, sizeof(type)))