mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-05 04:27:51 +00:00
sys/unix: add sysctlbyname for darwin
This commit is contained in:
@@ -1,20 +1,29 @@
|
||||
//+build darwin
|
||||
package unix
|
||||
|
||||
import "core:sys/darwin"
|
||||
import "base:intrinsics"
|
||||
|
||||
import "core:c"
|
||||
import "core:sys/darwin"
|
||||
|
||||
_ :: darwin
|
||||
|
||||
sysctl :: proc(mib: []i32, val: ^$T) -> (ok: bool) {
|
||||
mib := mib
|
||||
result_size := i64(size_of(T))
|
||||
sysctl :: proc "contextless" (mib: []i32, val: ^$T) -> (ok: bool) {
|
||||
result_size := c.size_t(size_of(T))
|
||||
res := darwin.syscall_sysctl(
|
||||
raw_data(mib), len(mib),
|
||||
val, &result_size,
|
||||
nil, 0,
|
||||
)
|
||||
return res == 0
|
||||
}
|
||||
|
||||
res := intrinsics.syscall(
|
||||
darwin.unix_offset_syscall(.sysctl),
|
||||
uintptr(raw_data(mib)), uintptr(len(mib)),
|
||||
uintptr(val), uintptr(&result_size),
|
||||
uintptr(0), uintptr(0),
|
||||
sysctlbyname :: proc "contextless" (name: string, val: ^$T) -> (ok: bool) {
|
||||
result_size := c.size_t(size_of(T))
|
||||
res := darwin.syscall_sysctlbyname(
|
||||
name,
|
||||
val, &result_size,
|
||||
nil, 0,
|
||||
)
|
||||
return res == 0
|
||||
}
|
||||
|
||||
@@ -1,21 +1,10 @@
|
||||
//+private
|
||||
//+build darwin
|
||||
package time
|
||||
|
||||
import "core:c"
|
||||
import "core:sys/unix"
|
||||
|
||||
foreign import libc "system:System.framework"
|
||||
foreign libc {
|
||||
@(link_name="sysctlbyname") _sysctlbyname :: proc(path: cstring, oldp: rawptr, oldlenp: rawptr, newp: rawptr, newlen: int) -> c.int ---
|
||||
}
|
||||
|
||||
_get_tsc_frequency :: proc "contextless" () -> (u64, bool) {
|
||||
tmp_freq : u64 = 0
|
||||
tmp_size : i64 = size_of(tmp_freq)
|
||||
ret := _sysctlbyname("machdep.tsc.frequency", &tmp_freq, &tmp_size, nil, 0)
|
||||
if ret < 0 {
|
||||
return 0, false
|
||||
}
|
||||
|
||||
return tmp_freq, true
|
||||
_get_tsc_frequency :: proc "contextless" () -> (freq: u64, ok: bool) {
|
||||
unix.sysctlbyname("machdep.tsc.frequency", &freq) or_return
|
||||
ok = true
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user