diff options
Diffstat (limited to 'src/os/executable_freebsd.go')
| -rw-r--r-- | src/os/executable_freebsd.go | 33 |
1 files changed, 6 insertions, 27 deletions
diff --git a/src/os/executable_freebsd.go b/src/os/executable_freebsd.go index ccaf8e6dd4..95f1a93cb9 100644 --- a/src/os/executable_freebsd.go +++ b/src/os/executable_freebsd.go @@ -1,33 +1,12 @@ -// Copyright 2016 The Go Authors. All rights reserved. +// Copyright 2020 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package os -import ( - "syscall" - "unsafe" +// From FreeBSD's <sys/sysctl.h> +const ( + _CTL_KERN = 1 + _KERN_PROC = 14 + _KERN_PROC_PATHNAME = 12 ) - -func executable() (string, error) { - mib := [4]int32{1 /* CTL_KERN */, 14 /* KERN_PROC */, 12 /* KERN_PROC_PATHNAME */, -1} - - n := uintptr(0) - // get length - _, _, err := syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(unsafe.Pointer(&mib[0])), 4, 0, uintptr(unsafe.Pointer(&n)), 0, 0) - if err != 0 { - return "", err - } - if n == 0 { // shouldn't happen - return "", nil - } - buf := make([]byte, n) - _, _, err = syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(unsafe.Pointer(&mib[0])), 4, uintptr(unsafe.Pointer(&buf[0])), uintptr(unsafe.Pointer(&n)), 0, 0) - if err != 0 { - return "", err - } - if n == 0 { // shouldn't happen - return "", nil - } - return string(buf[:n-1]), nil -} |
