46 lines
		
	
	
		
			734 B
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			734 B
		
	
	
	
		
			C++
		
	
	
#include "master.hpp"
 | 
						|
 | 
						|
#include <sys/types.h>
 | 
						|
#include <sys/sysctl.h>
 | 
						|
 | 
						|
namespace factor {
 | 
						|
char *vm_saved_path;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/* 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);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
}
 |