tool.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*
  2. * 文件名: tool.h
  3. * 目标: aFun tool公共API
  4. * aFunTool是aFun实用工具库, 内含aFun调用的实用函数
  5. */
  6. #ifndef TOOL__H
  7. #define TOOL__H
  8. #include <wchar.h>
  9. #include <string.h>
  10. #include <signal.h>
  11. #include <dlfcn.h>
  12. #include "macro.h"
  13. // md5 工具
  14. #define READ_DATA_SIZE (1024)
  15. #define MD5_SIZE (16)
  16. #define MD5_STR_LEN (MD5_SIZE * 2)
  17. #define MD5_STRING (MD5_STR_LEN + 1)
  18. int getFileMd5(const char *path, char *md5str);
  19. // hash 工具
  20. typedef long int time33_t;
  21. time33_t time33(char *str);
  22. time33_t w_time33(wchar_t *str);
  23. // string 工具
  24. #define EQ_STR(str1, str2) (!strcmp((str1), (str2)))
  25. #define EQ_WSTR(wid1, wid2) (!wcscmp((wid1), (wid2)))
  26. #define NEW_STR(size) (char *)safeCalloc((size) + 1, sizeof(char))
  27. #define NEW_WSTR(size) (wchar_t *)safeCalloc((size) + 1, sizeof(wchar_t))
  28. #define STR_LEN(p) (((p) == NULL) ? 0 : strlen((p)))
  29. #define WSTR_LEN(p) (((p) == NULL) ? 0 : wcslen((p)))
  30. char *strCopy(const char *str);
  31. wchar_t *wstrCopy(const wchar_t *str);
  32. wchar_t *wstrWithWchar(wchar_t *str, size_t size, int free_old, ...);
  33. wchar_t *wstrWithWchar_(wchar_t *str, wint_t new, bool free_old);
  34. wchar_t *wstrExpansion(wchar_t *str, size_t size, bool free_old);
  35. char *strJoinIter(char *base, int free_base, ...);
  36. char *strJoin(char *first, char *second, bool free_first, bool free_last);
  37. char *strJoin_(char *first, char *second, bool free_first, bool free_last);
  38. wchar_t *wstrJoin(wchar_t *first, wchar_t *second, bool free_first, bool free_last);
  39. wchar_t *wstrJoin_(wchar_t *first, wchar_t *second, bool free_first, bool free_last);
  40. wchar_t *wstrCopySelf(wchar_t *str, long times);
  41. wchar_t *wstrReverse(wchar_t *str);
  42. wchar_t *convertToWstr(char *str, bool free_old);
  43. char *convertToStr(wchar_t *wstr, bool free_old);
  44. // file 工具
  45. #ifdef __linux__
  46. #define SEP "/"
  47. #define SEP_CH '/'
  48. #define SHARED_MARK ".so"
  49. #else
  50. #define SEP "\\"
  51. #define SEP_CH '\\'
  52. #define SHARED_MARK ".dll"
  53. #endif
  54. int checkFile(char *path);
  55. char *getFileName(char *path_1);
  56. char *fileNameToVar(char *name, bool need_free);
  57. char *findPath(char *path, char *env, bool need_free);
  58. // signal 工具
  59. typedef int vsignal;
  60. typedef struct SignalTag SignalTag;
  61. struct SignalTag{
  62. volatile vsignal signum; // 信号
  63. volatile enum SignalType{
  64. signal_reset=0, // 没有信号
  65. signal_appear, // 信号未被处理
  66. } status;
  67. };
  68. extern volatile struct SignalTag signal_tag; // 在tool.c中定义
  69. void afSignalHandler(int signum);
  70. // time 工具
  71. void safeSleep(double ms);
  72. // dlc 工具
  73. /*
  74. * NEW_DLC_SYMBOL: 用于定义指定类型的symbol结构体
  75. * DLC_SYMBOL: 指定类型的symbol结构体名
  76. * GET_SYMBOL: 访问symbol成员
  77. * MAKE_SYMBOL: 生成一个symbol
  78. * COPY_SYMBOL: 拷贝一个symbol(拷贝其引用)
  79. * READ_SYMBOL: 在dlc中获取一个symbol
  80. * FREE_SYMBOL: 释放symbol
  81. *
  82. * openLibary: 打开动态库
  83. * freeLibary: 释放动态库
  84. * dlcExit: 释放所有动态库
  85. */
  86. #define NEW_DLC_SYMBOL(TYPE, NAME) struct DLC##NAME##SYMBOL { \
  87. TYPE *symbol; \
  88. struct DlcHandle *dlc; \
  89. }
  90. #define DLC_SYMBOL(NAME) struct DLC##NAME##SYMBOL
  91. #define GET_SYMBOL(SYMBOL) (*((SYMBOL)->symbol))
  92. #define MAKE_SYMBOL(symbol, TYPE) ((struct DLC##TYPE##SYMBOL *) (makeSymbol_(symbol)))
  93. #define COPY_SYMBOL(ds, TYPE) ((struct DLC##TYPE##SYMBOL *) (copySymbol_((DlcSymbol_ *)(ds))))
  94. #define READ_SYMBOL(dlc, name, TYPE) ((struct DLC##TYPE##SYMBOL *) (getSymbol_((dlc), (name))))
  95. #define FREE_SYMBOL(symbol) ((symbol) != NULL ? (freeSymbol_((DlcSymbol_ *)(symbol))) : NULL)
  96. typedef struct DlcSymbol_ DlcSymbol_;
  97. typedef struct DlcHandle DlcHandle;
  98. struct DlcHandle *openLibary(const char *file, int mode);
  99. struct DlcSymbol_ *makeSymbol_(void *symbol);
  100. struct DlcSymbol_ *copySymbol_(struct DlcSymbol_ *ds);
  101. struct DlcSymbol_ *getSymbol_(struct DlcHandle *dlc, const char *name);
  102. void freeSymbol_(struct DlcSymbol_ *symbol);
  103. bool freeLibary(struct DlcHandle *dlc);
  104. void dlcExit();
  105. #endif //TOOL__H