| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | #include "master.hpp"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-04 02:46:13 -04:00
										 |  |  | namespace factor | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | /* From SBCL */ | 
					
						
							| 
									
										
										
										
											2009-05-05 12:33:35 -04:00
										 |  |  | const char *vm_executable_path() | 
					
						
							| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | { | 
					
						
							|  |  |  | 	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); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2009-05-04 02:46:13 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | } |