|
|
@@ -13,6 +13,7 @@
|
|
|
package unix
|
|
|
|
|
|
import (
|
|
|
+ "sort"
|
|
|
"syscall"
|
|
|
"unsafe"
|
|
|
)
|
|
|
@@ -32,22 +33,11 @@ type SockaddrDatalink struct {
|
|
|
func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
|
|
|
|
|
func nametomib(name string) (mib []_C_int, err error) {
|
|
|
- // Perform lookup via a binary search
|
|
|
- left := 0
|
|
|
- right := len(sysctlMib) - 1
|
|
|
- for {
|
|
|
- idx := left + (right-left)/2
|
|
|
- switch {
|
|
|
- case name == sysctlMib[idx].ctlname:
|
|
|
- return sysctlMib[idx].ctloid, nil
|
|
|
- case name > sysctlMib[idx].ctlname:
|
|
|
- left = idx + 1
|
|
|
- default:
|
|
|
- right = idx - 1
|
|
|
- }
|
|
|
- if left > right {
|
|
|
- break
|
|
|
- }
|
|
|
+ i := sort.Search(len(sysctlMib), func(i int) bool {
|
|
|
+ return sysctlMib[i].ctlname >= name
|
|
|
+ })
|
|
|
+ if i < len(sysctlMib) && sysctlMib[i].ctlname == name {
|
|
|
+ return sysctlMib[i].ctloid, nil
|
|
|
}
|
|
|
return nil, EINVAL
|
|
|
}
|