mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
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:
@@ -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
@@ -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
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user