#include "master.h"

/* From SBCL */
const char *vm_executable_path(void)
{
	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);
}