diff --git a/core/os/os2/allocators.odin b/core/os/os2/allocators.odin index ddfe230be56..296be98a6eb 100644 --- a/core/os/os2/allocators.odin +++ b/core/os/os2/allocators.odin @@ -22,9 +22,14 @@ global_default_temp_allocator_index: uint @(require_results) temp_allocator :: proc() -> runtime.Allocator { + arena := &global_default_temp_allocator_arenas[global_default_temp_allocator_index] + if arena.backing_allocator.procedure == nil { + arena.backing_allocator = heap_allocator() + } + return runtime.Allocator{ procedure = temp_allocator_proc, - data = &global_default_temp_allocator_arenas[global_default_temp_allocator_index], + data = arena, } } diff --git a/core/os/os_darwin.odin b/core/os/os_darwin.odin index 2bb6c0c5999..e00c63ccdbd 100644 --- a/core/os/os_darwin.odin +++ b/core/os/os_darwin.odin @@ -1095,7 +1095,8 @@ unset_env :: proc(key: string) -> Error { } @(require_results) -get_current_directory :: proc() -> string { +get_current_directory :: proc(allocator := context.allocator) -> string { + context.allocator = allocator page_size := get_page_size() // NOTE(tetra): See note in os_linux.odin/get_current_directory. buf := make([dynamic]u8, page_size) for { diff --git a/core/os/os_freebsd.odin b/core/os/os_freebsd.odin index 241f42c0bb0..f617cf97369 100644 --- a/core/os/os_freebsd.odin +++ b/core/os/os_freebsd.odin @@ -840,7 +840,8 @@ get_env :: proc(key: string, allocator := context.allocator) -> (value: string) } @(require_results) -get_current_directory :: proc() -> string { +get_current_directory :: proc(allocator := context.allocator) -> string { + context.allocator = allocator // NOTE(tetra): I would use PATH_MAX here, but I was not able to find // an authoritative value for it across all systems. // The largest value I could find was 4096, so might as well use the page size. diff --git a/core/os/os_linux.odin b/core/os/os_linux.odin index 9132edbfe9e..8c8cd7f7349 100644 --- a/core/os/os_linux.odin +++ b/core/os/os_linux.odin @@ -985,7 +985,8 @@ unset_env :: proc(key: string) -> Error { } @(require_results) -get_current_directory :: proc() -> string { +get_current_directory :: proc(allocator := context.allocator) -> string { + context.allocator = allocator // NOTE(tetra): I would use PATH_MAX here, but I was not able to find // an authoritative value for it across all systems. // The largest value I could find was 4096, so might as well use the page size. diff --git a/core/os/os_netbsd.odin b/core/os/os_netbsd.odin index ba9b40fc365..493527803a5 100644 --- a/core/os/os_netbsd.odin +++ b/core/os/os_netbsd.odin @@ -894,7 +894,8 @@ get_env :: proc(key: string, allocator := context.allocator) -> (value: string) } @(require_results) -get_current_directory :: proc() -> string { +get_current_directory :: proc(allocator := context.allocator) -> string { + context.allocator = allocator // NOTE(tetra): I would use PATH_MAX here, but I was not able to find // an authoritative value for it across all systems. // The largest value I could find was 4096, so might as well use the page size. diff --git a/core/os/os_openbsd.odin b/core/os/os_openbsd.odin index aff78dc6039..62872d9dc7d 100644 --- a/core/os/os_openbsd.odin +++ b/core/os/os_openbsd.odin @@ -806,7 +806,8 @@ get_env :: proc(key: string, allocator := context.allocator) -> (value: string) } @(require_results) -get_current_directory :: proc() -> string { +get_current_directory :: proc(allocator := context.allocator) -> string { + context.allocator = allocator buf := make([dynamic]u8, MAX_PATH) for { cwd := _unix_getcwd(cstring(raw_data(buf)), c.size_t(len(buf)))