Merge pull request #893 from tony/freebsd-app_path

Support for FreeBSD get_app_path
This commit is contained in:
David Capello 2015-12-09 10:10:36 -03:00
commit f1c1c580cc

View File

@ -16,6 +16,8 @@
#if __APPLE__ #if __APPLE__
#include <mach-o/dyld.h> #include <mach-o/dyld.h>
#elif __FreeBSD__
#include <sys/sysctl.h>
#endif #endif
#include "base/path.h" #include "base/path.h"
@ -120,15 +122,16 @@ std::string get_app_path()
std::vector<char> path(MAXPATHLEN); std::vector<char> path(MAXPATHLEN);
#if __APPLE__ #if __APPLE__
uint32_t size = path.size(); uint32_t size = path.size();
while (_NSGetExecutablePath(&path[0], &size) == -1) while (_NSGetExecutablePath(&path[0], &size) == -1)
path.resize(size); path.resize(size);
#elif __FreeBSD__
#else size_t size = path.size();
const int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 };
while (sysctl(mib, 4, &path[0], &size, NULL, 0) == -1)
path.resize(size);
#else /* linux */
readlink("/proc/self/exe", &path[0], path.size()); readlink("/proc/self/exe", &path[0], path.size());
#endif #endif
return std::string(&path[0]); return std::string(&path[0]);