aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaytan Laats <laytanlaats@hotmail.com>2024-04-29 23:36:13 +0200
committerLaytan Laats <laytanlaats@hotmail.com>2024-04-30 00:24:09 +0200
commitcebe6bd982597f49cae5b4cd745e99aff1454ff7 (patch)
tree9cbf6f8e51c3013d754751477bec59c2aba61d93
parentc58da765625786ac9caa49a7f1335d9251766c02 (diff)
sys/unix: add sysctlbyname for darwin
-rw-r--r--core/sys/unix/sysctl_darwin.odin27
-rw-r--r--core/time/tsc_darwin.odin21
2 files changed, 23 insertions, 25 deletions
diff --git a/core/sys/unix/sysctl_darwin.odin b/core/sys/unix/sysctl_darwin.odin
index 76c72f478..6417961e5 100644
--- a/core/sys/unix/sysctl_darwin.odin
+++ b/core/sys/unix/sysctl_darwin.odin
@@ -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
}
diff --git a/core/time/tsc_darwin.odin b/core/time/tsc_darwin.odin
index 6688ae7d8..841c0b692 100644
--- a/core/time/tsc_darwin.odin
+++ b/core/time/tsc_darwin.odin
@@ -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
}