21 #ifndef _freetds_macros_h_ 
   22 #define _freetds_macros_h_ 
   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 # if defined(__llvm__) || (defined(__GNUC__) && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))) 
   43 # define TDS_COMPILE_CHECK(name,check) \ 
   44     _Static_assert(check,#name) 
   45 # elif defined(__GNUC__) && __GNUC__ >= 2 
   46 # define TDS_COMPILE_CHECK(name,check) \ 
   47     extern int name[(check)?1:-1] __attribute__ ((unused)) 
   49 # define TDS_COMPILE_CHECK(name,check) \ 
   50     extern int name[(check)?1:-1] 
   52 # define TDS_EXTRA_CHECK(stmt) stmt 
   54 # define TDS_COMPILE_CHECK(name,check) \ 
   55     extern int disabled_check_##name 
   56 # define TDS_EXTRA_CHECK(stmt) 
   59 #if defined(__GNUC__) && __GNUC__ >= 3 
   60 # define TDS_LIKELY(x)  __builtin_expect(!!(x), 1) 
   61 # define TDS_UNLIKELY(x)    __builtin_expect(!!(x), 0) 
   63 # define TDS_LIKELY(x)  (x) 
   64 # define TDS_UNLIKELY(x)    (x) 
   67 #if ENABLE_EXTRA_CHECKS && defined(__GNUC__) && __GNUC__ >= 4 
   68 #define TDS_WUR __attribute__ ((__warn_unused_result__)) 
   73 #define TDS_INT2PTR(i) ((void*)(((char*)0)+(i))) 
   74 #define TDS_PTR2INT(p) ((int)(((char*)(p))-((char*)0)))