Use sysctl instead of /proc to find executable path on FreeBSD
..since /proc usually isn't mounted on FreeBSD. Signed-off-by: Juergen Lock <nox@jelal.kn-bremen.de> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
		
							parent
							
								
									2b5eb37123
								
							
						
					
					
						commit
						92c0e6579c
					
				
							
								
								
									
										12
									
								
								vl.c
								
								
								
								
							
							
						
						
									
										12
									
								
								vl.c
								
								
								
								
							| 
						 | 
				
			
			@ -52,6 +52,7 @@
 | 
			
		|||
#include <sys/stat.h>
 | 
			
		||||
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
 | 
			
		||||
#include <libutil.h>
 | 
			
		||||
#include <sys/sysctl.h>
 | 
			
		||||
#else
 | 
			
		||||
#include <util.h>
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -2276,10 +2277,13 @@ static char *find_datadir(const char *argv0)
 | 
			
		|||
    }
 | 
			
		||||
#elif defined(__FreeBSD__)
 | 
			
		||||
    {
 | 
			
		||||
        int len;
 | 
			
		||||
        len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1);
 | 
			
		||||
        if (len > 0) {
 | 
			
		||||
            buf[len] = 0;
 | 
			
		||||
        static int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
 | 
			
		||||
        size_t len = sizeof(buf) - 1;
 | 
			
		||||
 | 
			
		||||
        *buf = '\0';
 | 
			
		||||
        if (!sysctl(mib, sizeof(mib)/sizeof(*mib), buf, &len, NULL, 0) &&
 | 
			
		||||
            *buf) {
 | 
			
		||||
            buf[sizeof(buf) - 1] = '\0';
 | 
			
		||||
            p = buf;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue