aboutsummaryrefslogtreecommitdiff
path: root/core/os/path_netbsd.odin
blob: a9ceb13df1d0584ebf612169704eb8859c1d2d53 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package os

import "base:runtime"

import "core:sys/posix"

_get_executable_path :: proc(allocator: runtime.Allocator) -> (path: string, err: Error) {
	temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator })

	buf := make([dynamic]byte, 1024, temp_allocator) or_return
	for {
		n := posix.readlink("/proc/curproc/exe", raw_data(buf), len(buf))
		if n < 0 {
			err = _get_platform_error()
			return
		}

		if n < len(buf) {
			return clone_string(string(buf[:n]), allocator)
		}

		resize(&buf, len(buf)*2) or_return
	}
}