util.h 2.1 KB

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