#include "master.hpp" namespace factor { const char* vm_executable_path() { ssize_t bufsiz = 4096; // readlink is called in a loop with increasing buffer sizes in case // someone tries to run Factor from a incredibly deeply nested // path. while (true) { char* buf = new char[bufsiz + 1]; ssize_t size= readlink("/proc/self/exe", buf, bufsiz); if (size < 0) { fatal_error("Cannot read /proc/self/exe", errno); } else { if (size < bufsiz) { // Buffer was large enough, return string. buf[size] = '\0'; const char* ret = safe_strdup(buf); delete[] buf; return ret; } else { // Buffer wasn't big enough, double it and try again. delete[] buf; bufsiz *= 2; } } } } }