utils.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #ifdef _WIN32
  5. #include <windows.h>
  6. #else
  7. #include <unistd.h>
  8. #endif
  9. class utUtils {
  10. public:
  11. void get_dir_exec(char *dir, char *exec) {
  12. #ifdef _WIN32
  13. char BufferFileName[MAX_PATH];
  14. memset(BufferFileName, 0, MAX_PATH);
  15. if (GetModuleFileName(NULL, BufferFileName, MAX_PATH)) {
  16. if (exec) {
  17. snprintf(exec, strlen(BufferFileName), "%s", BufferFileName);
  18. }
  19. std::string ss(BufferFileName);
  20. int idx = ss.find_last_of("\\");
  21. BufferFileName[idx] = '\0';
  22. snprintf(dir, strlen(BufferFileName), "%s", BufferFileName);
  23. }
  24. return;
  25. #else
  26. char *filename = nullptr;
  27. if (readlink("/proc/self/exe", dir, 1024) < 0) {
  28. dir[0] = '\0';
  29. return;
  30. }
  31. filename = strrchr(dir, '/');
  32. if (filename == nullptr) {
  33. dir[0] = '\0';
  34. return;
  35. }
  36. ++filename;
  37. if (exec) {
  38. sprintf(exec, "%s", filename);
  39. }
  40. *filename = '\0';
  41. return;
  42. #endif
  43. }
  44. std::string get_env(const std::string env) {
  45. #ifdef _WIN32
  46. char *buf = nullptr;
  47. size_t sz = 0;
  48. if (_dupenv_s(&buf, &sz, env.c_str()) == 0 && buf != nullptr) {
  49. std::string var(buf);
  50. free(buf);
  51. return var;
  52. } else {
  53. return std::string();
  54. }
  55. #else
  56. char *value = getenv(env.c_str());
  57. if (value == nullptr) {
  58. return std::string();
  59. }
  60. return std::string(value);
  61. #endif
  62. }
  63. };