Source file
src/os/executable_sysctl.go
Documentation: os
1
2
3
4
5
6
7
8 package os
9
10 import (
11 "syscall"
12 "unsafe"
13 )
14
15 func executable() (string, error) {
16 mib := [4]int32{_CTL_KERN, _KERN_PROC, _KERN_PROC_PATHNAME, -1}
17
18 n := uintptr(0)
19
20 _, _, err := syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(unsafe.Pointer(&mib[0])), 4, 0, uintptr(unsafe.Pointer(&n)), 0, 0)
21 if err != 0 {
22 return "", err
23 }
24 if n == 0 {
25 return "", nil
26 }
27 buf := make([]byte, n)
28 _, _, err = syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(unsafe.Pointer(&mib[0])), 4, uintptr(unsafe.Pointer(&buf[0])), uintptr(unsafe.Pointer(&n)), 0, 0)
29 if err != 0 {
30 return "", err
31 }
32 if n == 0 {
33 return "", nil
34 }
35 return string(buf[:n-1]), nil
36 }
37
View as plain text