diff --git a/core/os/os_darwin.odin b/core/os/os_darwin.odin index a011fa58a..1f7e21723 100644 --- a/core/os/os_darwin.odin +++ b/core/os/os_darwin.odin @@ -344,9 +344,8 @@ get_last_error_string :: proc() -> string { } open :: proc(path: string, flags: int = O_RDWR, mode: int = 0) -> (Handle, Errno) { - cstr := strings.clone_to_cstring(path) + cstr := strings.clone_to_cstring(path, context.temp_allocator) handle := _unix_open(cstr, i32(flags), u16(mode)) - delete(cstr) if handle == -1 { return INVALID_HANDLE, 1 } diff --git a/core/os/os_freebsd.odin b/core/os/os_freebsd.odin index 82317532d..3f5174c1b 100644 --- a/core/os/os_freebsd.odin +++ b/core/os/os_freebsd.odin @@ -267,9 +267,8 @@ get_last_error :: proc() -> int { } open :: proc(path: string, flags: int = O_RDONLY, mode: int = 0) -> (Handle, Errno) { - cstr := strings.clone_to_cstring(path); + cstr := strings.clone_to_cstring(path, context.temp_allocator); handle := _unix_open(cstr, c.int(flags), c.int(mode)); - delete(cstr); if handle == -1 { return INVALID_HANDLE, Errno(get_last_error()); } @@ -342,9 +341,7 @@ last_write_time_by_name :: proc(name: string) -> (File_Time, Errno) { } stat :: proc(path: string) -> (OS_Stat, Errno) { - cstr := strings.clone_to_cstring(path); - defer delete(cstr); - + cstr := strings.clone_to_cstring(path, context.temp_allocator); s: OS_Stat; result := _unix_stat(cstr, &s); if result == -1 { @@ -363,8 +360,7 @@ fstat :: proc(fd: Handle) -> (OS_Stat, Errno) { } access :: proc(path: string, mask: int) -> (bool, Errno) { - cstr := strings.clone_to_cstring(path); - defer delete(cstr); + cstr := strings.clone_to_cstring(path, context.temp_allocator); result := _unix_access(cstr, c.int(mask)); if result == -1 { return false, Errno(get_last_error()); @@ -388,8 +384,7 @@ heap_free :: proc(ptr: rawptr) { } getenv :: proc(name: string) -> (string, bool) { - path_str := strings.clone_to_cstring(name); - defer delete(path_str); + path_str := strings.clone_to_cstring(name, context.temp_allocator); cstr := _unix_getenv(path_str); if cstr == nil { return "", false; @@ -432,15 +427,13 @@ current_thread_id :: proc "contextless" () -> int { } dlopen :: proc(filename: string, flags: int) -> rawptr { - cstr := strings.clone_to_cstring(filename); - defer delete(cstr); + cstr := strings.clone_to_cstring(filename, context.temp_allocator); handle := _unix_dlopen(cstr, c.int(flags)); return handle; } dlsym :: proc(handle: rawptr, symbol: string) -> rawptr { assert(handle != nil); - cstr := strings.clone_to_cstring(symbol); - defer delete(cstr); + cstr := strings.clone_to_cstring(symbol, context.temp_allocator); proc_handle := _unix_dlsym(handle, cstr); return proc_handle; } diff --git a/core/os/os_linux.odin b/core/os/os_linux.odin index 4edfa46da..200d6d68d 100644 --- a/core/os/os_linux.odin +++ b/core/os/os_linux.odin @@ -460,9 +460,8 @@ fork :: proc() -> (Pid, Errno) { } open :: proc(path: string, flags: int = O_RDONLY, mode: int = 0) -> (Handle, Errno) { - cstr := strings.clone_to_cstring(path) + cstr := strings.clone_to_cstring(path, context.temp_allocator) handle := _unix_open(cstr, flags, mode) - defer delete(cstr) if handle < 0 { return INVALID_HANDLE, _get_errno(int(handle)) } @@ -610,8 +609,7 @@ last_write_time_by_name :: proc(name: string) -> (File_Time, Errno) { @private _stat :: proc(path: string) -> (OS_Stat, Errno) { - cstr := strings.clone_to_cstring(path) - defer delete(cstr) + cstr := strings.clone_to_cstring(path, context.temp_allocator) // deliberately uninitialized; the syscall fills this buffer for us s: OS_Stat = --- @@ -624,8 +622,7 @@ _stat :: proc(path: string) -> (OS_Stat, Errno) { @private _lstat :: proc(path: string) -> (OS_Stat, Errno) { - cstr := strings.clone_to_cstring(path) - defer delete(cstr) + cstr := strings.clone_to_cstring(path, context.temp_allocator) // deliberately uninitialized; the syscall fills this buffer for us s: OS_Stat = --- @@ -692,8 +689,7 @@ _readdir :: proc(dirp: Dir) -> (entry: Dirent, err: Errno, end_of_stream: bool) @private _readlink :: proc(path: string) -> (string, Errno) { - path_cstr := strings.clone_to_cstring(path) - defer delete(path_cstr) + path_cstr := strings.clone_to_cstring(path, context.temp_allocator) bufsz : uint = 256 buf := make([]byte, bufsz) @@ -729,8 +725,7 @@ absolute_path_from_relative :: proc(rel: string) -> (path: string, err: Errno) { rel = "." } - rel_cstr := strings.clone_to_cstring(rel) - defer delete(rel_cstr) + rel_cstr := strings.clone_to_cstring(rel, context.temp_allocator) path_ptr := _unix_realpath(rel_cstr, nil) if path_ptr == nil { @@ -745,8 +740,7 @@ absolute_path_from_relative :: proc(rel: string) -> (path: string, err: Errno) { } access :: proc(path: string, mask: int) -> (bool, Errno) { - cstr := strings.clone_to_cstring(path) - defer delete(cstr) + cstr := strings.clone_to_cstring(path, context.temp_allocator) result := _unix_access(cstr, mask) if result < 0 { return false, _get_errno(result) @@ -770,8 +764,7 @@ heap_free :: proc(ptr: rawptr) { } getenv :: proc(name: string) -> (string, bool) { - path_str := strings.clone_to_cstring(name) - defer delete(path_str) + path_str := strings.clone_to_cstring(name, context.temp_allocator) cstr := _unix_getenv(path_str) if cstr == nil { return "", false @@ -817,15 +810,13 @@ current_thread_id :: proc "contextless" () -> int { } dlopen :: proc(filename: string, flags: int) -> rawptr { - cstr := strings.clone_to_cstring(filename) - defer delete(cstr) + cstr := strings.clone_to_cstring(filename, context.temp_allocator) handle := _unix_dlopen(cstr, c.int(flags)) return handle } dlsym :: proc(handle: rawptr, symbol: string) -> rawptr { assert(handle != nil) - cstr := strings.clone_to_cstring(symbol) - defer delete(cstr) + cstr := strings.clone_to_cstring(symbol, context.temp_allocator) proc_handle := _unix_dlsym(handle, cstr) return proc_handle } diff --git a/core/sys/darwin/xnu_system_call_helpers.odin b/core/sys/darwin/xnu_system_call_helpers.odin index 5b060cfd3..94fe0bf47 100644 --- a/core/sys/darwin/xnu_system_call_helpers.odin +++ b/core/sys/darwin/xnu_system_call_helpers.odin @@ -91,8 +91,7 @@ sys_open :: proc(path: string, oflag: Open_Flags, mode: Permission) -> (c.int, b cmode: u32 = 0 cflags: u32 = 0 - cpath: cstring = strings.clone_to_cstring(path) - defer delete(cpath) + cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator) cflags = _sys_permission_mode(mode) @@ -124,39 +123,32 @@ sys_open :: proc(path: string, oflag: Open_Flags, mode: Permission) -> (c.int, b } sys_mkdir :: proc(path: string, mode: Permission) -> bool { - cpath: cstring = strings.clone_to_cstring(path) - defer delete(cpath) + cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator) cflags := _sys_permission_mode(mode) return syscall_mkdir(cpath, cflags) != -1 } sys_mkdir_at :: proc(fd: c.int, path: string, mode: Permission) -> bool { - cpath: cstring = strings.clone_to_cstring(path) - defer delete(cpath) + cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator) cflags := _sys_permission_mode(mode) return syscall_mkdir_at(fd, cpath, cflags) != -1 } sys_rmdir :: proc(path: string, mode: Permission) -> bool { - cpath: cstring = strings.clone_to_cstring(path) - defer delete(cpath) + cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator) cflags := _sys_permission_mode(mode) return syscall_rmdir(cpath, cflags) != -1 } sys_rename :: proc(path: string, new_path: string) -> bool { - cpath: cstring = strings.clone_to_cstring(path) - defer delete(cpath) - cnpath: cstring = strings.clone_to_cstring(new_path) - defer delete(cnpath) + cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator) + cnpath: cstring = strings.clone_to_cstring(new_path, context.temp_allocator) return syscall_rename(cpath, cnpath) != -1 } sys_rename_at :: proc(fd: c.int, path: string, to_fd: c.int, new_path: string) -> bool { - cpath: cstring = strings.clone_to_cstring(path) - defer delete(cpath) - cnpath: cstring = strings.clone_to_cstring(new_path) - defer delete(cnpath) + cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator) + cnpath: cstring = strings.clone_to_cstring(new_path, context.temp_allocator) return syscall_rename_at(fd, cpath, to_fd, cnpath) != -1 } @@ -165,14 +157,12 @@ sys_lseek :: proc(fd: c.int, offset: i64, whence: Offset_From) -> i64 { } sys_chmod :: proc(path: string, mode: Permission) -> bool { - cpath: cstring = strings.clone_to_cstring(path) - defer delete(cpath) + cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator) cmode := _sys_permission_mode(mode) return syscall_chmod(cpath, cmode) != -1 } sys_lstat :: proc(path: string, status: ^stat) -> bool { - cpath: cstring = strings.clone_to_cstring(path) - defer delete(cpath) + cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator) return syscall_lstat(cpath, status) != -1 }