diff --git a/core/os/os_darwin.odin b/core/os/os_darwin.odin index c36823e3f..41dc8345c 100644 --- a/core/os/os_darwin.odin +++ b/core/os/os_darwin.odin @@ -633,13 +633,18 @@ heap_free :: proc(ptr: rawptr) { _unix_free(ptr) } -getenv :: proc(name: string) -> (string, bool) { - path_str := strings.clone_to_cstring(name, context.temp_allocator) +lookup_env :: proc(key: string, allocator := context.allocator) -> (value: string, found: bool) { + path_str := strings.clone_to_cstring(key, context.temp_allocator) cstr := _unix_getenv(path_str) if cstr == nil { return "", false } - return string(cstr), true + return strings.clone(string(cstr), allocator), true +} + +get_env :: proc(key: string, allocator := context.allocator) -> (value: string) { + value, _ = lookup_env(key, allocator) + return } get_current_directory :: proc() -> string { diff --git a/core/os/os_freebsd.odin b/core/os/os_freebsd.odin index 6545423d4..a991caafc 100644 --- a/core/os/os_freebsd.odin +++ b/core/os/os_freebsd.odin @@ -618,13 +618,18 @@ heap_free :: proc(ptr: rawptr) { _unix_free(ptr) } -getenv :: proc(name: string) -> (string, bool) { - path_str := strings.clone_to_cstring(name, context.temp_allocator) +lookup_env :: proc(key: string, allocator := context.allocator) -> (value: string, found: bool) { + path_str := strings.clone_to_cstring(key, context.temp_allocator) cstr := _unix_getenv(path_str) if cstr == nil { return "", false } - return string(cstr), true + return strings.clone(string(cstr), allocator), true +} + +get_env :: proc(key: string, allocator := context.allocator) -> (value: string) { + value, _ = lookup_env(key, allocator) + return } get_current_directory :: proc() -> string { diff --git a/core/os/os_openbsd.odin b/core/os/os_openbsd.odin index dd230f9b5..9a3dbd874 100644 --- a/core/os/os_openbsd.odin +++ b/core/os/os_openbsd.odin @@ -620,13 +620,18 @@ heap_free :: proc(ptr: rawptr) { _unix_free(ptr) } -getenv :: proc(name: string) -> (string, bool) { - path_str := strings.clone_to_cstring(name, context.temp_allocator) +lookup_env :: proc(key: string, allocator := context.allocator) -> (value: string, found: bool) { + path_str := strings.clone_to_cstring(key, context.temp_allocator) cstr := _unix_getenv(path_str) if cstr == nil { return "", false } - return string(cstr), true + return strings.clone(string(cstr), allocator), true +} + +get_env :: proc(key: string, allocator := context.allocator) -> (value: string) { + value, _ = lookup_env(key, allocator) + return } get_current_directory :: proc() -> string {