1 #ifndef __UTIL__H 2 #define __UTIL__H 3 #include <errno.h> 4 #include <sys/types.h> 5 #include <inttypes.h> 6 7 #define DIE(msg) die(__FILE__, __LINE__, msg, 0) 8 #define SYSDIE(msg) die(__FILE__, __LINE__, msg, errno) 9 #define DIE_UNLESS(expr) (void)((expr) || die(__FILE__, __LINE__, #expr, 0)) 10 11 #if !WIN32 12 typedef int64_t _int64; 13 typedef int32_t _int32; 14 typedef int16_t _int16; 15 typedef int8_t _int8; 16 #endif 17 _int64 htonll( _int64 src); 18 _int64 ntohll( _int64 src); 19 20 /* SHIFT Macros */ 21 #define SHIFT_INT64(ptr,nboll,llval) \ 22 (nboll=htonll(llval), memcpy(ptr,&nboll, sizeof(_int64)), ptr+=sizeof(_int64)) 23 #define SHIFT_INT32(ptr,nbo,ival) \ 24 (nbo=htonl(ival), memcpy(ptr,&nbo,sizeof(int32_t)), ptr+=sizeof(int32_t)) 25 #define SHIFT_INT16(ptr,nbo,hval) \ 26 (nbo=htonl(hval), memcpy(ptr,&nbo,sizeof(int16_t)), ptr+=sizeof(int16_t)) 27 #define SHIFT_BYTE(ptr,ival) ((*ptr = ival), ptr++) 28 29 /* UNSHIFT Macros */ 30 #define UNSHIFT_INT64(ptr,nboll,llval) \ 31 (memcpy(&nboll,ptr,sizeof(_int64)), llval=ntohll(nboll), ptr+=sizeof(_int64)) 32 #define UNSHIFT_INT32(ptr,nbo,ival) \ 33 (memcpy(&nbo,ptr,sizeof(int32_t)), ival=ntohl(nbo), ptr+=sizeof(int32_t)) 34 #define UNSHIFT_INT16(ptr,nbo,hval) \ 35 (memcpy(&nbo,ptr,sizeof(int16_t)), hval=ntohs(nbo), ptr+=sizeof(int16_t)) 36 #define UNSHIFT_BYTE(ptr,ival) (ival = (*((unsigned char *)(ptr)),ptr++) 37 38 void *btmalloc( size_t size); 39 void *btcalloc( size_t nmemb, size_t size); 40 void *btrealloc( void *buf, size_t size); 41 void btfree( void *buf); 42 43 44 char *bts_strerror( int err); 45 void bts_perror( int err, char *msg); 46 int die( char *file, int line, char *msg, int err); 47 int openPath( char *path, int flags); 48 int cacheopen( char *path, int flags, int mode); 49 void cacheclose( void); 50 void hexencode (const unsigned char *digest, int len, char *buf, int buflen); 51 int hexdecode (unsigned char *digest, int len, const char *buf, int buflen); 52 #if WIN32 || !HAVE_ON_EXIT 53 typedef void (*exitfn_ptr) (int,void*); 54 int on_exit( exitfn_ptr exitfn, void* data) ; 55 #endif 56 /* 57 #define malloc(s) use_btmalloc_instead 58 #define calloc(n,s) use_btcalloc_instead 59 #define realloc(p,s) use_btrealloc_instead 60 /* 61 #undef free 62 /* 63 #define free(p) use_btfree_instead 64 */ 65 66 void hexdump( void *buf, int buflen); 67 68 #endif 69