diff --git a/core/os/os_darwin.odin b/core/os/os_darwin.odin index d4435ec639e..3247eeeee00 100644 --- a/core/os/os_darwin.odin +++ b/core/os/os_darwin.odin @@ -1196,7 +1196,7 @@ _processor_core_count :: proc() -> int { return 1 } -@(require_results) +@(private, require_results) _alloc_command_line_arguments :: proc() -> []string { res := make([]string, len(runtime.args__)) for _, i in res { @@ -1205,6 +1205,11 @@ _alloc_command_line_arguments :: proc() -> []string { return res } +@(private, fini) +_delete_command_line_arguments :: proc() { + delete(args) +} + socket :: proc(domain: int, type: int, protocol: int) -> (Socket, Error) { result := _unix_socket(c.int(domain), c.int(type), c.int(protocol)) if result < 0 { diff --git a/core/os/os_freebsd.odin b/core/os/os_freebsd.odin index 87a56b05729..7eafb499303 100644 --- a/core/os/os_freebsd.odin +++ b/core/os/os_freebsd.odin @@ -936,7 +936,7 @@ _processor_core_count :: proc() -> int { } -@(require_results) +@(private, require_results) _alloc_command_line_arguments :: proc() -> []string { res := make([]string, len(runtime.args__)) for arg, i in runtime.args__ { @@ -944,3 +944,8 @@ _alloc_command_line_arguments :: proc() -> []string { } return res } + +@(private, fini) +_delete_command_line_arguments :: proc() { + delete(args) +} diff --git a/core/os/os_haiku.odin b/core/os/os_haiku.odin index 4a57afb87e6..24d68d3419f 100644 --- a/core/os/os_haiku.odin +++ b/core/os/os_haiku.odin @@ -316,7 +316,7 @@ file_size :: proc(fd: Handle) -> (i64, Error) { // "Argv" arguments converted to Odin strings args := _alloc_command_line_arguments() -@(require_results) +@(private, require_results) _alloc_command_line_arguments :: proc() -> []string { res := make([]string, len(runtime.args__)) for arg, i in runtime.args__ { @@ -325,6 +325,11 @@ _alloc_command_line_arguments :: proc() -> []string { return res } +@(private, fini) +_delete_command_line_arguments :: proc() { + delete(args) +} + @(private, require_results) _stat :: proc(path: string) -> (OS_Stat, Error) { runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD() diff --git a/core/os/os_linux.odin b/core/os/os_linux.odin index e023ce7cb84..47b321f9536 100644 --- a/core/os/os_linux.odin +++ b/core/os/os_linux.odin @@ -1069,7 +1069,7 @@ _processor_core_count :: proc() -> int { return int(_unix_get_nprocs()) } -@(require_results) +@(private, require_results) _alloc_command_line_arguments :: proc() -> []string { res := make([]string, len(runtime.args__)) for arg, i in runtime.args__ { @@ -1078,6 +1078,11 @@ _alloc_command_line_arguments :: proc() -> []string { return res } +@(private, fini) +_delete_command_line_arguments :: proc() { + delete(args) +} + @(require_results) socket :: proc(domain: int, type: int, protocol: int) -> (Socket, Error) { result := unix.sys_socket(domain, type, protocol) diff --git a/core/os/os_netbsd.odin b/core/os/os_netbsd.odin index e3ba760a4de..7bef85bed08 100644 --- a/core/os/os_netbsd.odin +++ b/core/os/os_netbsd.odin @@ -986,7 +986,7 @@ _processor_core_count :: proc() -> int { return 1 } -@(require_results) +@(private, require_results) _alloc_command_line_arguments :: proc() -> []string { res := make([]string, len(runtime.args__)) for arg, i in runtime.args__ { @@ -994,3 +994,8 @@ _alloc_command_line_arguments :: proc() -> []string { } return res } + +@(private, fini) +_delete_command_line_arguments :: proc() { + delete(args) +} diff --git a/core/os/os_openbsd.odin b/core/os/os_openbsd.odin index 3c377968c56..c013fbc9148 100644 --- a/core/os/os_openbsd.odin +++ b/core/os/os_openbsd.odin @@ -885,7 +885,7 @@ _processor_core_count :: proc() -> int { return int(_sysconf(_SC_NPROCESSORS_ONLN)) } -@(require_results) +@(private, require_results) _alloc_command_line_arguments :: proc() -> []string { res := make([]string, len(runtime.args__)) for arg, i in runtime.args__ { @@ -893,3 +893,8 @@ _alloc_command_line_arguments :: proc() -> []string { } return res } + +@(private, fini) +_delete_command_line_arguments :: proc() { + delete(args) +} diff --git a/core/os/os_wasi.odin b/core/os/os_wasi.odin index 28f470357b6..0edc08415f8 100644 --- a/core/os/os_wasi.odin +++ b/core/os/os_wasi.odin @@ -27,7 +27,7 @@ stderr: Handle = 2 args := _alloc_command_line_arguments() -@(require_results) +@(private, require_results) _alloc_command_line_arguments :: proc() -> (args: []string) { args = make([]string, len(runtime.args__)) for &arg, i in args { @@ -36,6 +36,11 @@ _alloc_command_line_arguments :: proc() -> (args: []string) { return } +@(private, fini) +_delete_command_line_arguments :: proc() { + delete(args) +} + // WASI works with "preopened" directories, the environment retrieves directories // (for example with `wasmtime --dir=. module.wasm`) and those given directories // are the only ones accessible by the application. diff --git a/core/os/os_windows.odin b/core/os/os_windows.odin index 0c532bf143e..3c1725cc58c 100644 --- a/core/os/os_windows.odin +++ b/core/os/os_windows.odin @@ -193,7 +193,7 @@ current_thread_id :: proc "contextless" () -> int { -@(require_results) +@(private, require_results) _alloc_command_line_arguments :: proc() -> []string { arg_count: i32 arg_list_ptr := win32.CommandLineToArgvW(win32.GetCommandLineW(), &arg_count) @@ -215,6 +215,14 @@ _alloc_command_line_arguments :: proc() -> []string { return arg_list } +@(private, fini) +_delete_command_line_arguments :: proc() { + for s in args { + delete(s) + } + delete(args) +} + /* Windows 11 (preview) has the same major and minor version numbers as Windows 10: 10 and 0 respectively.