herr.cpp 994 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "herr.h"
  2. #include <map>
  3. #include "hthread.h" // for gettid
  4. // id => errcode
  5. static std::map<int, int> s_mapErr;
  6. void set_id_errcode(int id, int errcode) {
  7. s_mapErr[id] = errcode;
  8. }
  9. int get_id_errcode(int id) {
  10. auto iter = s_mapErr.find(id);
  11. if (iter != s_mapErr.end()) {
  12. // note: erase after get
  13. s_mapErr.erase(iter);
  14. return iter->second;
  15. }
  16. return ERR_OK;
  17. }
  18. void set_last_errcode(int errcode) {
  19. #if defined(OS_WIN) || defined(OS_LINUX)
  20. int id = gettid();
  21. #else
  22. int id = getpid();
  23. #endif
  24. set_id_errcode(id, errcode);
  25. }
  26. int get_last_errcode() {
  27. #if defined(OS_WIN) || defined(OS_LINUX)
  28. int id = gettid();
  29. #else
  30. int id = getpid();
  31. #endif
  32. return get_id_errcode(id);
  33. }
  34. const char* get_errmsg(int err) {
  35. switch (err) {
  36. #define CASE_ERR(macro, errcode, errmsg) \
  37. case errcode: \
  38. return errmsg;
  39. FOREACH_ERR(CASE_ERR)
  40. #undef CASE_ERR
  41. default:
  42. return "undefined errcode";
  43. }
  44. }