Browse Source

os/os2: use proc_pidpath for executable path on darwin

Laytan Laats 6 months ago
parent
commit
d54de6704a
2 changed files with 6 additions and 27 deletions
  1. 6 20
      core/os/os2/path_darwin.odin
  2. 0 7
      core/sys/darwin/dyld.odin

+ 6 - 20
core/os/os2/path_darwin.odin

@@ -6,26 +6,12 @@ import "core:sys/darwin"
 import "core:sys/posix"
 
 _get_executable_path :: proc(allocator: runtime.Allocator) -> (path: string, err: Error) {
-	size: u32
-
-	ret := darwin._NSGetExecutablePath(nil, &size)
-	assert(ret == -1)
-	assert(size > 0)
-
-	TEMP_ALLOCATOR_GUARD()
-
-	buf := make([]byte, size, temp_allocator()) or_return
-	assert(u32(len(buf)) == size)
-
-	ret = darwin._NSGetExecutablePath(raw_data(buf), &size)
-	assert(ret == 0)
-
-	real := posix.realpath(cstring(raw_data(buf)))
-	if real == nil {
-		err = _get_platform_error()
-		return
+	buffer: [darwin.PIDPATHINFO_MAXSIZE]byte = ---
+	ret := darwin.proc_pidpath(posix.getpid(), raw_data(buffer[:]), len(buffer))
+	if ret > 0 {
+		return clone_string(string(buffer[:ret]), allocator)
 	}
-	defer posix.free(real)
 
-	return clone_string(string(real), allocator)
+	err = _get_platform_error()
+	return
 }

+ 0 - 7
core/sys/darwin/dyld.odin

@@ -1,7 +0,0 @@
-package darwin
-
-foreign import system "system:System.framework"
-
-foreign system {
-	_NSGetExecutablePath :: proc(buf: [^]byte, bufsize: ^u32) -> i32 ---
-}