vm: Use the old FreeBSD os-freebsd.cpp so we don't need procfs installed (it's not mounted by default).
parent
080303530a
commit
d139924bf5
|
@ -1,33 +1,45 @@
|
|||
#include "master.hpp"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
namespace factor {
|
||||
char *vm_saved_path;
|
||||
|
||||
/*
|
||||
FreeBSD needs proc mounted for this function to work.
|
||||
"mount -t procfs proc /proc"
|
||||
*/
|
||||
|
||||
const char* vm_executable_path(){
|
||||
ssize_t bufsiz = 4096;
|
||||
while (true) {
|
||||
char* buf = new char [bufsiz + 1];
|
||||
ssize_t size = readlink("/proc/curproc/file", buf, bufsiz);
|
||||
if (size < 0) {
|
||||
fatal_error("Cannot read /proc/curproc/file", errno);
|
||||
}
|
||||
else {
|
||||
if (size < bufsiz) {
|
||||
buf[size] = '\0';
|
||||
const char* ret = safe_strdup(buf);
|
||||
delete[] buf;
|
||||
return ret;
|
||||
} else {
|
||||
delete[] buf;
|
||||
bufsiz *= 2;
|
||||
}
|
||||
|
||||
/* 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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue