support current_executable_path on FreeBSD

- add support for current_executable_path on FreeBSD

Closes #878
Esse commit está contido em:
Vanilla Hsu
2013-07-23 14:04:20 -07:00
commit de Sara Golemon
commit 159c001f24
+19 -1
Ver Arquivo
@@ -22,6 +22,10 @@
#include <mach-o/dyld.h>
#endif
#ifdef __FreeBSD__
#include <sys/sysctl.h>
#endif
namespace HPHP {
std::string current_executable_path() {
@@ -34,8 +38,22 @@ std::string current_executable_path() {
uint32_t size = sizeof(result);
uint32_t success = _NSGetExecutablePath(result, &size);
return std::string(result, (success == 0) ? size : 0);
#elif defined(__FreeBSD__)
char result[PATH_MAX];
size_t size = sizeof(result);
int mib[4];
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_PATHNAME;
mib[3] = -1;
if (sysctl(mib, 4, result, &size, nullptr, 0) < 0) {
return std::string();
}
return std::string(result, (size > 0) ? size : 0);
#else
// Return empty string for all other platforms for now (e.g. FreeBSD)
// XXX: How do you do this on your platform?
return std::string();
#endif
}