Browse Source

sys/unix: add sysctlbyname for darwin

Laytan Laats 1 year ago
parent
commit
cebe6bd982
2 changed files with 23 additions and 25 deletions
  1. 18 9
      core/sys/unix/sysctl_darwin.odin
  2. 5 16
      core/time/tsc_darwin.odin

+ 18 - 9
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
 }

+ 5 - 16
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
 }