mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Merge pull request #4680 from haesbaert/args-leak
Make sure we don't leak os.args. Fixes #1633.
This commit is contained in:
@@ -1225,7 +1225,7 @@ _processor_core_count :: proc() -> int {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@(require_results)
|
@(private, require_results)
|
||||||
_alloc_command_line_arguments :: proc() -> []string {
|
_alloc_command_line_arguments :: proc() -> []string {
|
||||||
res := make([]string, len(runtime.args__))
|
res := make([]string, len(runtime.args__))
|
||||||
for _, i in res {
|
for _, i in res {
|
||||||
@@ -1234,6 +1234,11 @@ _alloc_command_line_arguments :: proc() -> []string {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@(private, fini)
|
||||||
|
_delete_command_line_arguments :: proc() {
|
||||||
|
delete(args)
|
||||||
|
}
|
||||||
|
|
||||||
socket :: proc(domain: int, type: int, protocol: int) -> (Socket, Error) {
|
socket :: proc(domain: int, type: int, protocol: int) -> (Socket, Error) {
|
||||||
result := _unix_socket(c.int(domain), c.int(type), c.int(protocol))
|
result := _unix_socket(c.int(domain), c.int(type), c.int(protocol))
|
||||||
if result < 0 {
|
if result < 0 {
|
||||||
|
|||||||
@@ -964,7 +964,7 @@ _processor_core_count :: proc() -> int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@(require_results)
|
@(private, require_results)
|
||||||
_alloc_command_line_arguments :: proc() -> []string {
|
_alloc_command_line_arguments :: proc() -> []string {
|
||||||
res := make([]string, len(runtime.args__))
|
res := make([]string, len(runtime.args__))
|
||||||
for arg, i in runtime.args__ {
|
for arg, i in runtime.args__ {
|
||||||
@@ -972,3 +972,8 @@ _alloc_command_line_arguments :: proc() -> []string {
|
|||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@(private, fini)
|
||||||
|
_delete_command_line_arguments :: proc() {
|
||||||
|
delete(args)
|
||||||
|
}
|
||||||
|
|||||||
@@ -316,7 +316,7 @@ file_size :: proc(fd: Handle) -> (i64, Error) {
|
|||||||
// "Argv" arguments converted to Odin strings
|
// "Argv" arguments converted to Odin strings
|
||||||
args := _alloc_command_line_arguments()
|
args := _alloc_command_line_arguments()
|
||||||
|
|
||||||
@(require_results)
|
@(private, require_results)
|
||||||
_alloc_command_line_arguments :: proc() -> []string {
|
_alloc_command_line_arguments :: proc() -> []string {
|
||||||
res := make([]string, len(runtime.args__))
|
res := make([]string, len(runtime.args__))
|
||||||
for arg, i in runtime.args__ {
|
for arg, i in runtime.args__ {
|
||||||
@@ -325,6 +325,11 @@ _alloc_command_line_arguments :: proc() -> []string {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@(private, fini)
|
||||||
|
_delete_command_line_arguments :: proc() {
|
||||||
|
delete(args)
|
||||||
|
}
|
||||||
|
|
||||||
@(private, require_results, no_sanitize_memory)
|
@(private, require_results, no_sanitize_memory)
|
||||||
_stat :: proc(path: string) -> (OS_Stat, Error) {
|
_stat :: proc(path: string) -> (OS_Stat, Error) {
|
||||||
runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
||||||
|
|||||||
@@ -1097,7 +1097,7 @@ _processor_core_count :: proc() -> int {
|
|||||||
return int(_unix_get_nprocs())
|
return int(_unix_get_nprocs())
|
||||||
}
|
}
|
||||||
|
|
||||||
@(require_results)
|
@(private, require_results)
|
||||||
_alloc_command_line_arguments :: proc() -> []string {
|
_alloc_command_line_arguments :: proc() -> []string {
|
||||||
res := make([]string, len(runtime.args__))
|
res := make([]string, len(runtime.args__))
|
||||||
for arg, i in runtime.args__ {
|
for arg, i in runtime.args__ {
|
||||||
@@ -1106,6 +1106,11 @@ _alloc_command_line_arguments :: proc() -> []string {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@(private, fini)
|
||||||
|
_delete_command_line_arguments :: proc() {
|
||||||
|
delete(args)
|
||||||
|
}
|
||||||
|
|
||||||
@(require_results)
|
@(require_results)
|
||||||
socket :: proc(domain: int, type: int, protocol: int) -> (Socket, Error) {
|
socket :: proc(domain: int, type: int, protocol: int) -> (Socket, Error) {
|
||||||
result := unix.sys_socket(domain, type, protocol)
|
result := unix.sys_socket(domain, type, protocol)
|
||||||
|
|||||||
@@ -1014,7 +1014,7 @@ _processor_core_count :: proc() -> int {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@(require_results)
|
@(private, require_results)
|
||||||
_alloc_command_line_arguments :: proc() -> []string {
|
_alloc_command_line_arguments :: proc() -> []string {
|
||||||
res := make([]string, len(runtime.args__))
|
res := make([]string, len(runtime.args__))
|
||||||
for arg, i in runtime.args__ {
|
for arg, i in runtime.args__ {
|
||||||
@@ -1022,3 +1022,8 @@ _alloc_command_line_arguments :: proc() -> []string {
|
|||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@(private, fini)
|
||||||
|
_delete_command_line_arguments :: proc() {
|
||||||
|
delete(args)
|
||||||
|
}
|
||||||
|
|||||||
@@ -914,7 +914,7 @@ _processor_core_count :: proc() -> int {
|
|||||||
return int(_sysconf(_SC_NPROCESSORS_ONLN))
|
return int(_sysconf(_SC_NPROCESSORS_ONLN))
|
||||||
}
|
}
|
||||||
|
|
||||||
@(require_results)
|
@(private, require_results)
|
||||||
_alloc_command_line_arguments :: proc() -> []string {
|
_alloc_command_line_arguments :: proc() -> []string {
|
||||||
res := make([]string, len(runtime.args__))
|
res := make([]string, len(runtime.args__))
|
||||||
for arg, i in runtime.args__ {
|
for arg, i in runtime.args__ {
|
||||||
@@ -922,3 +922,8 @@ _alloc_command_line_arguments :: proc() -> []string {
|
|||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@(private, fini)
|
||||||
|
_delete_command_line_arguments :: proc() {
|
||||||
|
delete(args)
|
||||||
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ stderr: Handle = 2
|
|||||||
|
|
||||||
args := _alloc_command_line_arguments()
|
args := _alloc_command_line_arguments()
|
||||||
|
|
||||||
@(require_results)
|
@(private, require_results)
|
||||||
_alloc_command_line_arguments :: proc() -> (args: []string) {
|
_alloc_command_line_arguments :: proc() -> (args: []string) {
|
||||||
args = make([]string, len(runtime.args__))
|
args = make([]string, len(runtime.args__))
|
||||||
for &arg, i in args {
|
for &arg, i in args {
|
||||||
@@ -36,6 +36,11 @@ _alloc_command_line_arguments :: proc() -> (args: []string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@(private, fini)
|
||||||
|
_delete_command_line_arguments :: proc() {
|
||||||
|
delete(args)
|
||||||
|
}
|
||||||
|
|
||||||
// WASI works with "preopened" directories, the environment retrieves directories
|
// WASI works with "preopened" directories, the environment retrieves directories
|
||||||
// (for example with `wasmtime --dir=. module.wasm`) and those given directories
|
// (for example with `wasmtime --dir=. module.wasm`) and those given directories
|
||||||
// are the only ones accessible by the application.
|
// are the only ones accessible by the application.
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ current_thread_id :: proc "contextless" () -> int {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
@(require_results)
|
@(private, require_results)
|
||||||
_alloc_command_line_arguments :: proc() -> []string {
|
_alloc_command_line_arguments :: proc() -> []string {
|
||||||
arg_count: i32
|
arg_count: i32
|
||||||
arg_list_ptr := win32.CommandLineToArgvW(win32.GetCommandLineW(), &arg_count)
|
arg_list_ptr := win32.CommandLineToArgvW(win32.GetCommandLineW(), &arg_count)
|
||||||
@@ -215,6 +215,14 @@ _alloc_command_line_arguments :: proc() -> []string {
|
|||||||
return arg_list
|
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
|
Windows 11 (preview) has the same major and minor version numbers
|
||||||
as Windows 10: 10 and 0 respectively.
|
as Windows 10: 10 and 0 respectively.
|
||||||
|
|||||||
Reference in New Issue
Block a user