use context.temp_allocator instead of general allocation + delete()

where clone_to_cstring is used with foreign code, it is prefered to use `context.temp_allocator` instead of using the general allocator and manually delete the memory after use.
This commit is contained in:
Sébastien Marie
2022-02-24 11:28:42 +00:00
parent ea34f321ed
commit 14f1793b3e
4 changed files with 26 additions and 53 deletions
+1 -2
View File
@@ -344,9 +344,8 @@ get_last_error_string :: proc() -> string {
} }
open :: proc(path: string, flags: int = O_RDWR, mode: int = 0) -> (Handle, Errno) { 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)) handle := _unix_open(cstr, i32(flags), u16(mode))
delete(cstr)
if handle == -1 { if handle == -1 {
return INVALID_HANDLE, 1 return INVALID_HANDLE, 1
} }
+6 -13
View File
@@ -267,9 +267,8 @@ get_last_error :: proc() -> int {
} }
open :: proc(path: string, flags: int = O_RDONLY, mode: int = 0) -> (Handle, 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, c.int(flags), c.int(mode)); handle := _unix_open(cstr, c.int(flags), c.int(mode));
delete(cstr);
if handle == -1 { if handle == -1 {
return INVALID_HANDLE, Errno(get_last_error()); 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) { stat :: proc(path: string) -> (OS_Stat, Errno) {
cstr := strings.clone_to_cstring(path); cstr := strings.clone_to_cstring(path, context.temp_allocator);
defer delete(cstr);
s: OS_Stat; s: OS_Stat;
result := _unix_stat(cstr, &s); result := _unix_stat(cstr, &s);
if result == -1 { if result == -1 {
@@ -363,8 +360,7 @@ fstat :: proc(fd: Handle) -> (OS_Stat, Errno) {
} }
access :: proc(path: string, mask: int) -> (bool, Errno) { access :: proc(path: string, mask: int) -> (bool, Errno) {
cstr := strings.clone_to_cstring(path); cstr := strings.clone_to_cstring(path, context.temp_allocator);
defer delete(cstr);
result := _unix_access(cstr, c.int(mask)); result := _unix_access(cstr, c.int(mask));
if result == -1 { if result == -1 {
return false, Errno(get_last_error()); return false, Errno(get_last_error());
@@ -388,8 +384,7 @@ heap_free :: proc(ptr: rawptr) {
} }
getenv :: proc(name: string) -> (string, bool) { getenv :: proc(name: string) -> (string, bool) {
path_str := strings.clone_to_cstring(name); path_str := strings.clone_to_cstring(name, context.temp_allocator);
defer delete(path_str);
cstr := _unix_getenv(path_str); cstr := _unix_getenv(path_str);
if cstr == nil { if cstr == nil {
return "", false; return "", false;
@@ -432,15 +427,13 @@ current_thread_id :: proc "contextless" () -> int {
} }
dlopen :: proc(filename: string, flags: int) -> rawptr { dlopen :: proc(filename: string, flags: int) -> rawptr {
cstr := strings.clone_to_cstring(filename); cstr := strings.clone_to_cstring(filename, context.temp_allocator);
defer delete(cstr);
handle := _unix_dlopen(cstr, c.int(flags)); handle := _unix_dlopen(cstr, c.int(flags));
return handle; return handle;
} }
dlsym :: proc(handle: rawptr, symbol: string) -> rawptr { dlsym :: proc(handle: rawptr, symbol: string) -> rawptr {
assert(handle != nil); assert(handle != nil);
cstr := strings.clone_to_cstring(symbol); cstr := strings.clone_to_cstring(symbol, context.temp_allocator);
defer delete(cstr);
proc_handle := _unix_dlsym(handle, cstr); proc_handle := _unix_dlsym(handle, cstr);
return proc_handle; return proc_handle;
} }
+9 -18
View File
@@ -460,9 +460,8 @@ fork :: proc() -> (Pid, Errno) {
} }
open :: proc(path: string, flags: int = O_RDONLY, mode: int = 0) -> (Handle, 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) handle := _unix_open(cstr, flags, mode)
defer delete(cstr)
if handle < 0 { if handle < 0 {
return INVALID_HANDLE, _get_errno(int(handle)) return INVALID_HANDLE, _get_errno(int(handle))
} }
@@ -610,8 +609,7 @@ last_write_time_by_name :: proc(name: string) -> (File_Time, Errno) {
@private @private
_stat :: proc(path: string) -> (OS_Stat, Errno) { _stat :: proc(path: string) -> (OS_Stat, Errno) {
cstr := strings.clone_to_cstring(path) cstr := strings.clone_to_cstring(path, context.temp_allocator)
defer delete(cstr)
// deliberately uninitialized; the syscall fills this buffer for us // deliberately uninitialized; the syscall fills this buffer for us
s: OS_Stat = --- s: OS_Stat = ---
@@ -624,8 +622,7 @@ _stat :: proc(path: string) -> (OS_Stat, Errno) {
@private @private
_lstat :: proc(path: string) -> (OS_Stat, Errno) { _lstat :: proc(path: string) -> (OS_Stat, Errno) {
cstr := strings.clone_to_cstring(path) cstr := strings.clone_to_cstring(path, context.temp_allocator)
defer delete(cstr)
// deliberately uninitialized; the syscall fills this buffer for us // deliberately uninitialized; the syscall fills this buffer for us
s: OS_Stat = --- s: OS_Stat = ---
@@ -692,8 +689,7 @@ _readdir :: proc(dirp: Dir) -> (entry: Dirent, err: Errno, end_of_stream: bool)
@private @private
_readlink :: proc(path: string) -> (string, Errno) { _readlink :: proc(path: string) -> (string, Errno) {
path_cstr := strings.clone_to_cstring(path) path_cstr := strings.clone_to_cstring(path, context.temp_allocator)
defer delete(path_cstr)
bufsz : uint = 256 bufsz : uint = 256
buf := make([]byte, bufsz) buf := make([]byte, bufsz)
@@ -729,8 +725,7 @@ absolute_path_from_relative :: proc(rel: string) -> (path: string, err: Errno) {
rel = "." rel = "."
} }
rel_cstr := strings.clone_to_cstring(rel) rel_cstr := strings.clone_to_cstring(rel, context.temp_allocator)
defer delete(rel_cstr)
path_ptr := _unix_realpath(rel_cstr, nil) path_ptr := _unix_realpath(rel_cstr, nil)
if path_ptr == 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) { access :: proc(path: string, mask: int) -> (bool, Errno) {
cstr := strings.clone_to_cstring(path) cstr := strings.clone_to_cstring(path, context.temp_allocator)
defer delete(cstr)
result := _unix_access(cstr, mask) result := _unix_access(cstr, mask)
if result < 0 { if result < 0 {
return false, _get_errno(result) return false, _get_errno(result)
@@ -770,8 +764,7 @@ heap_free :: proc(ptr: rawptr) {
} }
getenv :: proc(name: string) -> (string, bool) { getenv :: proc(name: string) -> (string, bool) {
path_str := strings.clone_to_cstring(name) path_str := strings.clone_to_cstring(name, context.temp_allocator)
defer delete(path_str)
cstr := _unix_getenv(path_str) cstr := _unix_getenv(path_str)
if cstr == nil { if cstr == nil {
return "", false return "", false
@@ -817,15 +810,13 @@ current_thread_id :: proc "contextless" () -> int {
} }
dlopen :: proc(filename: string, flags: int) -> rawptr { dlopen :: proc(filename: string, flags: int) -> rawptr {
cstr := strings.clone_to_cstring(filename) cstr := strings.clone_to_cstring(filename, context.temp_allocator)
defer delete(cstr)
handle := _unix_dlopen(cstr, c.int(flags)) handle := _unix_dlopen(cstr, c.int(flags))
return handle return handle
} }
dlsym :: proc(handle: rawptr, symbol: string) -> rawptr { dlsym :: proc(handle: rawptr, symbol: string) -> rawptr {
assert(handle != nil) assert(handle != nil)
cstr := strings.clone_to_cstring(symbol) cstr := strings.clone_to_cstring(symbol, context.temp_allocator)
defer delete(cstr)
proc_handle := _unix_dlsym(handle, cstr) proc_handle := _unix_dlsym(handle, cstr)
return proc_handle return proc_handle
} }
+10 -20
View File
@@ -91,8 +91,7 @@ sys_open :: proc(path: string, oflag: Open_Flags, mode: Permission) -> (c.int, b
cmode: u32 = 0 cmode: u32 = 0
cflags: u32 = 0 cflags: u32 = 0
cpath: cstring = strings.clone_to_cstring(path) cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator)
defer delete(cpath)
cflags = _sys_permission_mode(mode) 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 { sys_mkdir :: proc(path: string, mode: Permission) -> bool {
cpath: cstring = strings.clone_to_cstring(path) cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator)
defer delete(cpath)
cflags := _sys_permission_mode(mode) cflags := _sys_permission_mode(mode)
return syscall_mkdir(cpath, cflags) != -1 return syscall_mkdir(cpath, cflags) != -1
} }
sys_mkdir_at :: proc(fd: c.int, path: string, mode: Permission) -> bool { sys_mkdir_at :: proc(fd: c.int, path: string, mode: Permission) -> bool {
cpath: cstring = strings.clone_to_cstring(path) cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator)
defer delete(cpath)
cflags := _sys_permission_mode(mode) cflags := _sys_permission_mode(mode)
return syscall_mkdir_at(fd, cpath, cflags) != -1 return syscall_mkdir_at(fd, cpath, cflags) != -1
} }
sys_rmdir :: proc(path: string, mode: Permission) -> bool { sys_rmdir :: proc(path: string, mode: Permission) -> bool {
cpath: cstring = strings.clone_to_cstring(path) cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator)
defer delete(cpath)
cflags := _sys_permission_mode(mode) cflags := _sys_permission_mode(mode)
return syscall_rmdir(cpath, cflags) != -1 return syscall_rmdir(cpath, cflags) != -1
} }
sys_rename :: proc(path: string, new_path: string) -> bool { sys_rename :: proc(path: string, new_path: string) -> bool {
cpath: cstring = strings.clone_to_cstring(path) cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator)
defer delete(cpath) cnpath: cstring = strings.clone_to_cstring(new_path, context.temp_allocator)
cnpath: cstring = strings.clone_to_cstring(new_path)
defer delete(cnpath)
return syscall_rename(cpath, cnpath) != -1 return syscall_rename(cpath, cnpath) != -1
} }
sys_rename_at :: proc(fd: c.int, path: string, to_fd: c.int, new_path: string) -> bool { sys_rename_at :: proc(fd: c.int, path: string, to_fd: c.int, new_path: string) -> bool {
cpath: cstring = strings.clone_to_cstring(path) cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator)
defer delete(cpath) cnpath: cstring = strings.clone_to_cstring(new_path, context.temp_allocator)
cnpath: cstring = strings.clone_to_cstring(new_path)
defer delete(cnpath)
return syscall_rename_at(fd, cpath, to_fd, cnpath) != -1 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 { sys_chmod :: proc(path: string, mode: Permission) -> bool {
cpath: cstring = strings.clone_to_cstring(path) cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator)
defer delete(cpath)
cmode := _sys_permission_mode(mode) cmode := _sys_permission_mode(mode)
return syscall_chmod(cpath, cmode) != -1 return syscall_chmod(cpath, cmode) != -1
} }
sys_lstat :: proc(path: string, status: ^stat) -> bool { sys_lstat :: proc(path: string, status: ^stat) -> bool {
cpath: cstring = strings.clone_to_cstring(path) cpath: cstring = strings.clone_to_cstring(path, context.temp_allocator)
defer delete(cpath)
return syscall_lstat(cpath, status) != -1 return syscall_lstat(cpath, status) != -1
} }