|
@@ -463,6 +463,7 @@ fork :: proc() -> (Pid, Errno) {
|
|
|
}
|
|
|
|
|
|
open :: proc(path: string, flags: int = O_RDONLY, mode: int = 0) -> (Handle, Errno) {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
cstr := strings.clone_to_cstring(path, context.temp_allocator)
|
|
|
handle := _unix_open(cstr, flags, mode)
|
|
|
if handle < 0 {
|
|
@@ -513,22 +514,26 @@ file_size :: proc(fd: Handle) -> (i64, Errno) {
|
|
|
}
|
|
|
|
|
|
rename :: proc(old_path, new_path: string) -> Errno {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
old_path_cstr := strings.clone_to_cstring(old_path, context.temp_allocator)
|
|
|
new_path_cstr := strings.clone_to_cstring(new_path, context.temp_allocator)
|
|
|
return _get_errno(_unix_rename(old_path_cstr, new_path_cstr))
|
|
|
}
|
|
|
|
|
|
remove :: proc(path: string) -> Errno {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
path_cstr := strings.clone_to_cstring(path, context.temp_allocator)
|
|
|
return _get_errno(_unix_unlink(path_cstr))
|
|
|
}
|
|
|
|
|
|
make_directory :: proc(path: string, mode: u32 = 0o775) -> Errno {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
path_cstr := strings.clone_to_cstring(path, context.temp_allocator)
|
|
|
return _get_errno(_unix_mkdir(path_cstr, mode))
|
|
|
}
|
|
|
|
|
|
remove_directory :: proc(path: string) -> Errno {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
path_cstr := strings.clone_to_cstring(path, context.temp_allocator)
|
|
|
return _get_errno(_unix_rmdir(path_cstr))
|
|
|
}
|
|
@@ -582,6 +587,7 @@ is_file :: proc {is_file_path, is_file_handle}
|
|
|
is_dir :: proc {is_dir_path, is_dir_handle}
|
|
|
|
|
|
exists :: proc(path: string) -> bool {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
cpath := strings.clone_to_cstring(path, context.temp_allocator)
|
|
|
res := _unix_access(cpath, O_RDONLY)
|
|
|
return res == 0
|
|
@@ -617,6 +623,7 @@ last_write_time_by_name :: proc(name: string) -> (File_Time, Errno) {
|
|
|
|
|
|
@private
|
|
|
_stat :: proc(path: string) -> (OS_Stat, Errno) {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
cstr := strings.clone_to_cstring(path, context.temp_allocator)
|
|
|
|
|
|
// deliberately uninitialized; the syscall fills this buffer for us
|
|
@@ -630,6 +637,7 @@ _stat :: proc(path: string) -> (OS_Stat, Errno) {
|
|
|
|
|
|
@private
|
|
|
_lstat :: proc(path: string) -> (OS_Stat, Errno) {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
cstr := strings.clone_to_cstring(path, context.temp_allocator)
|
|
|
|
|
|
// deliberately uninitialized; the syscall fills this buffer for us
|
|
@@ -697,6 +705,7 @@ _readdir :: proc(dirp: Dir) -> (entry: Dirent, err: Errno, end_of_stream: bool)
|
|
|
|
|
|
@private
|
|
|
_readlink :: proc(path: string) -> (string, Errno) {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD(ignore = context.temp_allocator == context.allocator)
|
|
|
path_cstr := strings.clone_to_cstring(path, context.temp_allocator)
|
|
|
|
|
|
bufsz : uint = 256
|
|
@@ -732,6 +741,7 @@ absolute_path_from_relative :: proc(rel: string) -> (path: string, err: Errno) {
|
|
|
if rel == "" {
|
|
|
rel = "."
|
|
|
}
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD(ignore = context.temp_allocator == context.allocator)
|
|
|
|
|
|
rel_cstr := strings.clone_to_cstring(rel, context.temp_allocator)
|
|
|
|
|
@@ -748,6 +758,7 @@ absolute_path_from_relative :: proc(rel: string) -> (path: string, err: Errno) {
|
|
|
}
|
|
|
|
|
|
access :: proc(path: string, mask: int) -> (bool, Errno) {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
cstr := strings.clone_to_cstring(path, context.temp_allocator)
|
|
|
result := _unix_access(cstr, mask)
|
|
|
if result < 0 {
|
|
@@ -778,6 +789,7 @@ heap_free :: proc(ptr: rawptr) {
|
|
|
}
|
|
|
|
|
|
lookup_env :: proc(key: string, allocator := context.allocator) -> (value: string, found: bool) {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD(ignore = context.temp_allocator == allocator)
|
|
|
path_str := strings.clone_to_cstring(key, context.temp_allocator)
|
|
|
// NOTE(tetra): Lifetime of 'cstr' is unclear, but _unix_free(cstr) segfaults.
|
|
|
cstr := _unix_getenv(path_str)
|
|
@@ -793,6 +805,7 @@ get_env :: proc(key: string, allocator := context.allocator) -> (value: string)
|
|
|
}
|
|
|
|
|
|
set_env :: proc(key, value: string) -> Errno {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
s := strings.concatenate({key, "=", value, "\x00"}, context.temp_allocator)
|
|
|
res := _unix_putenv(strings.unsafe_string_to_cstring(s))
|
|
|
if res < 0 {
|
|
@@ -802,6 +815,7 @@ set_env :: proc(key, value: string) -> Errno {
|
|
|
}
|
|
|
|
|
|
unset_env :: proc(key: string) -> Errno {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
s := strings.clone_to_cstring(key, context.temp_allocator)
|
|
|
res := _unix_putenv(s)
|
|
|
if res < 0 {
|
|
@@ -832,6 +846,7 @@ get_current_directory :: proc() -> string {
|
|
|
}
|
|
|
|
|
|
set_current_directory :: proc(path: string) -> (err: Errno) {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
cstr := strings.clone_to_cstring(path, context.temp_allocator)
|
|
|
res := _unix_chdir(cstr)
|
|
|
if res < 0 {
|
|
@@ -850,12 +865,14 @@ current_thread_id :: proc "contextless" () -> int {
|
|
|
}
|
|
|
|
|
|
dlopen :: proc(filename: string, flags: int) -> rawptr {
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
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)
|
|
|
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
|
|
|
cstr := strings.clone_to_cstring(symbol, context.temp_allocator)
|
|
|
proc_handle := _unix_dlsym(handle, cstr)
|
|
|
return proc_handle
|