mirror of
https://github.com/rwinkhart/sys.git
synced 2026-08-28 04:46:44 -04:00
unix: add SysctlClockinfo on dragonfly and freebsd
Change-Id: I0d439b5c59c79594c6ecfebe0375971e1344cc09 Reviewed-on: https://go-review.googlesource.com/c/sys/+/213400 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
committed by
Tobias Klauser
parent
ef85f5a75d
commit
548cf772de
@@ -510,6 +510,23 @@ func SysctlRaw(name string, args ...int) ([]byte, error) {
|
|||||||
return buf[:n], nil
|
return buf[:n], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SysctlClockinfo(name string) (*Clockinfo, error) {
|
||||||
|
mib, err := sysctlmib(name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
n := uintptr(SizeofClockinfo)
|
||||||
|
var ci Clockinfo
|
||||||
|
if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if n != SizeofClockinfo {
|
||||||
|
return nil, EIO
|
||||||
|
}
|
||||||
|
return &ci, nil
|
||||||
|
}
|
||||||
|
|
||||||
//sys utimes(path string, timeval *[2]Timeval) (err error)
|
//sys utimes(path string, timeval *[2]Timeval) (err error)
|
||||||
|
|
||||||
func Utimes(path string, tv []Timeval) error {
|
func Utimes(path string, tv []Timeval) error {
|
||||||
|
|||||||
@@ -64,3 +64,12 @@ func TestSysctlUint32(t *testing.T) {
|
|||||||
}
|
}
|
||||||
t.Logf("kern.maxproc: %v", maxproc)
|
t.Logf("kern.maxproc: %v", maxproc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSysctlClockinfo(t *testing.T) {
|
||||||
|
ci, err := unix.SysctlClockinfo("kern.clockrate")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Logf("tick = %v, hz = %v, profhz = %v, stathz = %v",
|
||||||
|
ci.Tick, ci.Hz, ci.Profhz, ci.Stathz)
|
||||||
|
}
|
||||||
|
|||||||
@@ -155,23 +155,6 @@ func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (
|
|||||||
|
|
||||||
//sys getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error)
|
//sys getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error)
|
||||||
|
|
||||||
func SysctlClockinfo(name string) (*Clockinfo, error) {
|
|
||||||
mib, err := sysctlmib(name)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
n := uintptr(SizeofClockinfo)
|
|
||||||
var ci Clockinfo
|
|
||||||
if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if n != SizeofClockinfo {
|
|
||||||
return nil, EIO
|
|
||||||
}
|
|
||||||
return &ci, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
//sysnb pipe() (r int, w int, err error)
|
//sysnb pipe() (r int, w int, err error)
|
||||||
|
|
||||||
func Pipe(p []int) (err error) {
|
func Pipe(p []int) (err error) {
|
||||||
|
|||||||
@@ -4,12 +4,6 @@
|
|||||||
|
|
||||||
package unix_test
|
package unix_test
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
// stringsFromByteSlice converts a sequence of attributes to a []string.
|
// stringsFromByteSlice converts a sequence of attributes to a []string.
|
||||||
// On Darwin, each entry is a NULL-terminated string.
|
// On Darwin, each entry is a NULL-terminated string.
|
||||||
func stringsFromByteSlice(buf []byte) []string {
|
func stringsFromByteSlice(buf []byte) []string {
|
||||||
@@ -23,12 +17,3 @@ func stringsFromByteSlice(buf []byte) []string {
|
|||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSysctlClockinfo(t *testing.T) {
|
|
||||||
ci, err := unix.SysctlClockinfo("kern.clockrate")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
t.Logf("tick = %v, tickadj = %v, hz = %v, profhz = %v, stathz = %v",
|
|
||||||
ci.Tick, ci.Tickadj, ci.Hz, ci.Profhz, ci.Stathz)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -106,23 +106,6 @@ func direntNamlen(buf []byte) (uint64, bool) {
|
|||||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
|
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
|
||||||
}
|
}
|
||||||
|
|
||||||
func SysctlClockinfo(name string) (*Clockinfo, error) {
|
|
||||||
mib, err := sysctlmib(name)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
n := uintptr(SizeofClockinfo)
|
|
||||||
var ci Clockinfo
|
|
||||||
if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if n != SizeofClockinfo {
|
|
||||||
return nil, EIO
|
|
||||||
}
|
|
||||||
return &ci, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
//sysnb pipe() (fd1 int, fd2 int, err error)
|
//sysnb pipe() (fd1 int, fd2 int, err error)
|
||||||
func Pipe(p []int) (err error) {
|
func Pipe(p []int) (err error) {
|
||||||
if len(p) != 2 {
|
if len(p) != 2 {
|
||||||
|
|||||||
@@ -27,15 +27,6 @@ func stringsFromByteSlice(buf []byte) []string {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSysctlClockinfo(t *testing.T) {
|
|
||||||
ci, err := unix.SysctlClockinfo("kern.clockrate")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
t.Logf("tick = %v, tickadj = %v, hz = %v, profhz = %v, stathz = %v",
|
|
||||||
ci.Tick, ci.Tickadj, ci.Hz, ci.Profhz, ci.Stathz)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestIoctlPtmget(t *testing.T) {
|
func TestIoctlPtmget(t *testing.T) {
|
||||||
fd, err := unix.Open("/dev/ptmx", unix.O_NOCTTY|unix.O_RDWR, 0666)
|
fd, err := unix.Open("/dev/ptmx", unix.O_NOCTTY|unix.O_RDWR, 0666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -55,23 +55,6 @@ func direntNamlen(buf []byte) (uint64, bool) {
|
|||||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
|
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
|
||||||
}
|
}
|
||||||
|
|
||||||
func SysctlClockinfo(name string) (*Clockinfo, error) {
|
|
||||||
mib, err := sysctlmib(name)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
n := uintptr(SizeofClockinfo)
|
|
||||||
var ci Clockinfo
|
|
||||||
if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if n != SizeofClockinfo {
|
|
||||||
return nil, EIO
|
|
||||||
}
|
|
||||||
return &ci, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func SysctlUvmexp(name string) (*Uvmexp, error) {
|
func SysctlUvmexp(name string) (*Uvmexp, error) {
|
||||||
mib, err := sysctlmib(name)
|
mib, err := sysctlmib(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -40,15 +40,6 @@ func TestPpoll(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSysctlClockinfo(t *testing.T) {
|
|
||||||
ci, err := unix.SysctlClockinfo("kern.clockrate")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
t.Logf("tick = %v, tickadj = %v, hz = %v, profhz = %v, stathz = %v",
|
|
||||||
ci.Tick, ci.Tickadj, ci.Hz, ci.Profhz, ci.Stathz)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestSysctlUvmexp(t *testing.T) {
|
func TestSysctlUvmexp(t *testing.T) {
|
||||||
uvm, err := unix.SysctlUvmexp("vm.uvmexp")
|
uvm, err := unix.SysctlUvmexp("vm.uvmexp")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -261,3 +261,9 @@ const (
|
|||||||
// Uname
|
// Uname
|
||||||
|
|
||||||
type Utsname C.struct_utsname
|
type Utsname C.struct_utsname
|
||||||
|
|
||||||
|
// Clockinfo
|
||||||
|
|
||||||
|
const SizeofClockinfo = C.sizeof_struct_clockinfo
|
||||||
|
|
||||||
|
type Clockinfo C.struct_clockinfo
|
||||||
|
|||||||
@@ -398,3 +398,9 @@ type CapRights C.struct_cap_rights
|
|||||||
// Uname
|
// Uname
|
||||||
|
|
||||||
type Utsname C.struct_utsname
|
type Utsname C.struct_utsname
|
||||||
|
|
||||||
|
// Clockinfo
|
||||||
|
|
||||||
|
const SizeofClockinfo = C.sizeof_struct_clockinfo
|
||||||
|
|
||||||
|
type Clockinfo C.struct_clockinfo
|
||||||
|
|||||||
@@ -467,3 +467,13 @@ type Utsname struct {
|
|||||||
Version [32]byte
|
Version [32]byte
|
||||||
Machine [32]byte
|
Machine [32]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SizeofClockinfo = 0x14
|
||||||
|
|
||||||
|
type Clockinfo struct {
|
||||||
|
Hz int32
|
||||||
|
Tick int32
|
||||||
|
Tickadj int32
|
||||||
|
Stathz int32
|
||||||
|
Profhz int32
|
||||||
|
}
|
||||||
|
|||||||
@@ -698,3 +698,13 @@ type Utsname struct {
|
|||||||
Version [256]byte
|
Version [256]byte
|
||||||
Machine [256]byte
|
Machine [256]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SizeofClockinfo = 0x14
|
||||||
|
|
||||||
|
type Clockinfo struct {
|
||||||
|
Hz int32
|
||||||
|
Tick int32
|
||||||
|
Spare int32
|
||||||
|
Stathz int32
|
||||||
|
Profhz int32
|
||||||
|
}
|
||||||
|
|||||||
@@ -704,3 +704,13 @@ type Utsname struct {
|
|||||||
Version [256]byte
|
Version [256]byte
|
||||||
Machine [256]byte
|
Machine [256]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SizeofClockinfo = 0x14
|
||||||
|
|
||||||
|
type Clockinfo struct {
|
||||||
|
Hz int32
|
||||||
|
Tick int32
|
||||||
|
Spare int32
|
||||||
|
Stathz int32
|
||||||
|
Profhz int32
|
||||||
|
}
|
||||||
|
|||||||
@@ -681,3 +681,13 @@ type Utsname struct {
|
|||||||
Version [256]byte
|
Version [256]byte
|
||||||
Machine [256]byte
|
Machine [256]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SizeofClockinfo = 0x14
|
||||||
|
|
||||||
|
type Clockinfo struct {
|
||||||
|
Hz int32
|
||||||
|
Tick int32
|
||||||
|
Spare int32
|
||||||
|
Stathz int32
|
||||||
|
Profhz int32
|
||||||
|
}
|
||||||
|
|||||||
@@ -682,3 +682,13 @@ type Utsname struct {
|
|||||||
Version [256]byte
|
Version [256]byte
|
||||||
Machine [256]byte
|
Machine [256]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SizeofClockinfo = 0x14
|
||||||
|
|
||||||
|
type Clockinfo struct {
|
||||||
|
Hz int32
|
||||||
|
Tick int32
|
||||||
|
Spare int32
|
||||||
|
Stathz int32
|
||||||
|
Profhz int32
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user