os: fix executable() for all other BSDs
parent
674969665e
commit
f5fa43d2fa
47
vlib/os/os.v
47
vlib/os/os.v
|
@ -523,43 +523,50 @@ pub fn executable() string {
|
||||||
mut result := malloc(MAX_PATH)
|
mut result := malloc(MAX_PATH)
|
||||||
$if linux {
|
$if linux {
|
||||||
count := int(C.readlink('/proc/self/exe', result, MAX_PATH ))
|
count := int(C.readlink('/proc/self/exe', result, MAX_PATH ))
|
||||||
if(count < 0) {
|
if count < 0 {
|
||||||
panic('error reading /proc/self/exe to get exe path')
|
panic('error reading /proc/self/exe to get exe path')
|
||||||
}
|
}
|
||||||
return tos(result, count)
|
return tos(result, count)
|
||||||
}
|
}
|
||||||
|
|
||||||
$if windows {
|
$if windows {
|
||||||
ret := int(C.GetModuleFileName( 0, result, MAX_PATH ))
|
ret := int(C.GetModuleFileName( 0, result, MAX_PATH ))
|
||||||
return tos( result, ret)
|
return tos( result, ret)
|
||||||
}
|
}
|
||||||
|
|
||||||
$if mac {
|
$if mac {
|
||||||
buf := malloc(MAX_PATH)
|
|
||||||
pid := C.getpid()
|
pid := C.getpid()
|
||||||
ret := C.proc_pidpath (pid, buf, MAX_PATH)
|
ret := C.proc_pidpath (pid, result, MAX_PATH)
|
||||||
if ret <= 0 {
|
if ret <= 0 {
|
||||||
println('executable() failed')
|
println('os.executable() failed')
|
||||||
return ''
|
return '.'
|
||||||
}
|
}
|
||||||
return string(buf)
|
|
||||||
/*
|
|
||||||
// This doesn't work with symlinks
|
|
||||||
mut bufsize := MAX_PATH // if buffer is too small this will be updated with size needed
|
|
||||||
if C._NSGetExecutablePath(result, &bufsize) == -1 {
|
|
||||||
panic('Could not get executable path, buffer too small (need: $bufsize).')
|
|
||||||
}
|
|
||||||
return string(result)
|
return string(result)
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
$if freebsd {
|
$if freebsd {
|
||||||
mut mib := [1 /* CTL_KERN */, 14 /* KERN_PROC */, 12 /* KERN_PROC_PATHNAME */, -1]!!
|
mut mib := [1 /* CTL_KERN */, 14 /* KERN_PROC */, 12 /* KERN_PROC_PATHNAME */, -1]!!
|
||||||
buf := [1024]byte
|
size := MAX_PATH
|
||||||
size := 1024
|
C.sysctl(mib, 4, result, &size, 0, 0)
|
||||||
C.sysctl(mib, 4, buf, &size, 0, 0)
|
return string(result)
|
||||||
return tos(buf, strlen(buf))
|
|
||||||
}
|
}
|
||||||
|
$if openbsd {
|
||||||
|
// "Sadly there is no way to get the full path of the executed file in OpenBSD."
|
||||||
|
// lol
|
||||||
|
return os.args[0]
|
||||||
|
}
|
||||||
|
$if netbsd {
|
||||||
|
count := int(C.readlink('/proc/curproc/exe', result, MAX_PATH ))
|
||||||
|
if count < 0 {
|
||||||
|
panic('error reading /proc/curproc/exe to get exe path')
|
||||||
|
}
|
||||||
|
return tos(result, count)
|
||||||
|
}
|
||||||
|
$if dragonfly {
|
||||||
|
count := int(C.readlink('/proc/curproc/file', result, MAX_PATH ))
|
||||||
|
if count < 0 {
|
||||||
|
panic('error reading /proc/curproc/file to get exe path')
|
||||||
|
}
|
||||||
|
return tos(result, count)
|
||||||
|
}
|
||||||
|
return '.'
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_dir(path string) bool {
|
pub fn is_dir(path string) bool {
|
||||||
|
|
Loading…
Reference in New Issue