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