aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorWrath <wrathdoesthat@gmail.com>2025-09-23 23:03:20 -0400
committerWrath <wrathdoesthat@gmail.com>2025-09-23 23:03:20 -0400
commit443b6e1641cad88fef72264a2f9b08c9448e6f99 (patch)
tree666746e779e81f9e5f436a378d89c3bd270b36a9 /core
parente9d20a9b4a069815f76a23ce5f429862b155b2d6 (diff)
Unify filepath.join behavior on between unix/windows
Diffstat (limited to 'core')
-rw-r--r--core/path/filepath/path_windows.odin29
1 files changed, 13 insertions, 16 deletions
diff --git a/core/path/filepath/path_windows.odin b/core/path/filepath/path_windows.odin
index 24c6e00a5..b3f4eee9e 100644
--- a/core/path/filepath/path_windows.odin
+++ b/core/path/filepath/path_windows.odin
@@ -32,7 +32,6 @@ is_UNC :: proc(path: string) -> bool {
return volume_name_len(path) > 2
}
-
is_abs :: proc(path: string) -> bool {
if is_reserved_name(path) {
return true
@@ -50,7 +49,6 @@ is_abs :: proc(path: string) -> bool {
return is_slash(path[0])
}
-
@(private)
temp_full_path :: proc(name: string) -> (path: string, err: os.Error) {
ta := context.temp_allocator
@@ -76,8 +74,6 @@ temp_full_path :: proc(name: string) -> (path: string, err: os.Error) {
return win32.utf16_to_utf8(buf[:n], ta)
}
-
-
abs :: proc(path: string, allocator := context.allocator) -> (string, bool) {
runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD(ignore = allocator == context.temp_allocator)
full_path, err := temp_full_path(path)
@@ -88,17 +84,16 @@ abs :: proc(path: string, allocator := context.allocator) -> (string, bool) {
return p, true
}
-
-join :: proc(elems: []string, allocator := context.allocator) -> string {
+join :: proc(elems: []string, allocator := context.allocator) -> (string, runtime.Allocator_Error) #optional_allocator_error {
for e, i in elems {
if e != "" {
return join_non_empty(elems[i:], allocator)
}
}
- return ""
+ return "", nil
}
-join_non_empty :: proc(elems: []string, allocator := context.allocator) -> string {
+join_non_empty :: proc(elems: []string, allocator := context.allocator) -> (joined: string, err: runtime.Allocator_Error) {
context.allocator = allocator
runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD(ignore = allocator == context.temp_allocator)
@@ -110,23 +105,25 @@ join_non_empty :: proc(elems: []string, allocator := context.allocator) -> strin
break
}
}
- s := strings.join(elems[i:], SEPARATOR_STRING, context.temp_allocator)
- s = strings.concatenate({elems[0], s}, context.temp_allocator)
+ s := strings.join(elems[i:], SEPARATOR_STRING, context.temp_allocator) or_return
+ s = strings.concatenate({elems[0], s}, context.temp_allocator) or_return
return clean(s)
}
- p := clean(strings.join(elems, SEPARATOR_STRING, context.temp_allocator))
+ p := strings.join(elems, SEPARATOR_STRING, context.temp_allocator) or_return
+ p = clean(p) or_return
if !is_UNC(p) {
- return p
+ return p, nil
}
-
- head := clean(elems[0], context.temp_allocator)
+
+ head := clean(elems[0], context.temp_allocator) or_return
if is_UNC(head) {
- return p
+ return p, nil
}
delete(p) // It is not needed now
- tail := clean(strings.join(elems[1:], SEPARATOR_STRING, context.temp_allocator), context.temp_allocator)
+ tail := strings.join(elems[1:], SEPARATOR_STRING, context.temp_allocator) or_return
+ tail = clean(tail, context.temp_allocator) or_return
if head[len(head)-1] == SEPARATOR {
return strings.concatenate({head, tail})
}