path_to_executable.cpp 837 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "path_to_executable.h"
  2. #ifdef __APPLE__
  3. # include <mach-o/dyld.h>
  4. #endif
  5. IGL_INLINE std::string igl::path_to_executable()
  6. {
  7. // http://pastebin.com/ffzzxPzi
  8. using namespace std;
  9. std::string path;
  10. char buffer[1024];
  11. uint32_t size = sizeof(buffer);
  12. #if defined (WIN32) || defined (WIN64)
  13. GetModuleFileName(buffer, &size);
  14. path = buffer;
  15. #elif defined (__APPLE__)
  16. if(_NSGetExecutablePath(buffer, &size) == 0)
  17. {
  18. path = buffer;
  19. }
  20. #elif defined(UNIX)
  21. if (readlink("/proc/self/exe", buffer, sizeof(buffer)) == -1)
  22. {
  23. path = buffer;
  24. }
  25. #elif defined(__FreeBSD__)
  26. int mib[4];
  27. mib[0] = CTL_KERN;
  28. mib[1] = KERN_PROC;
  29. mib[2] = KERN_PROC_PATHNAME;
  30. mib[3] = -1;
  31. sysctl(mib, 4, buffer, sizeof(buffer), NULL, 0);
  32. path = buffer;
  33. #elif defined(SUNOS)
  34. path = getexecname();
  35. #endif
  36. return path;
  37. }