factor/vm/os-freebsd.cpp

40 lines
621 B
C++

#include "master.hpp"
namespace factor
{
/* From SBCL */
const char *vm_executable_path()
{
char path[PATH_MAX + 1];
if (getosreldate() >= 600024)
{
/* KERN_PROC_PATHNAME is available */
size_t len = PATH_MAX + 1;
int mib[4];
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_PATHNAME;
mib[3] = -1;
if (sysctl(mib, 4, &path, &len, NULL, 0) != 0)
return NULL;
}
else
{
int size;
size = readlink("/proc/curproc/file", path, sizeof(path) - 1);
if (size < 0)
return NULL;
path[size] = '\0';
}
if(strcmp(path, "unknown") == 0)
return NULL;
return safe_strdup(path);
}
}