40 lines
		
	
	
		
			621 B
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			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);
 | |
| }
 | |
| 
 | |
| }
 |