aboutsummaryrefslogtreecommitdiff
path: root/core/path/filepath
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2024-10-30 11:43:47 +0000
committerGitHub <noreply@github.com>2024-10-30 11:43:47 +0000
commitee76acd665911e2f28d5183b3c0a07a665dbf858 (patch)
treeca210a7985dcb2a9487de9bf9a63d69aaedad839 /core/path/filepath
parent8312528a873e2b0742c85f8d995d2e453f5d3a10 (diff)
parent7e12e37df900e2264a45d65574cda30b9faeedeb (diff)
Merge pull request #4427 from laytan/posix-additions
Finish sys/posix with Linux and partial Windows support & clean up other packages as a result
Diffstat (limited to 'core/path/filepath')
-rw-r--r--core/path/filepath/path_unix.odin37
1 files changed, 5 insertions, 32 deletions
diff --git a/core/path/filepath/path_unix.odin b/core/path/filepath/path_unix.odin
index a18dc739e..35b98a7ae 100644
--- a/core/path/filepath/path_unix.odin
+++ b/core/path/filepath/path_unix.odin
@@ -1,14 +1,10 @@
#+build linux, darwin, freebsd, openbsd, netbsd
package filepath
-when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
-} else {
- foreign import libc "system:c"
-}
-
import "base:runtime"
+
import "core:strings"
+import "core:sys/posix"
SEPARATOR :: '/'
SEPARATOR_STRING :: `/`
@@ -28,11 +24,11 @@ abs :: proc(path: string, allocator := context.allocator) -> (string, bool) {
rel = "."
}
rel_cstr := strings.clone_to_cstring(rel, context.temp_allocator)
- path_ptr := realpath(rel_cstr, nil)
+ path_ptr := posix.realpath(rel_cstr, nil)
if path_ptr == nil {
- return "", __error()^ == 0
+ return "", posix.errno() == nil
}
- defer _unix_free(rawptr(path_ptr))
+ defer posix.free(path_ptr)
path_str := strings.clone(string(path_ptr), allocator)
return path_str, true
@@ -48,26 +44,3 @@ join :: proc(elems: []string, allocator := context.allocator) -> (joined: string
}
return "", nil
}
-
-@(private)
-foreign libc {
- realpath :: proc(path: cstring, resolved_path: [^]byte = nil) -> cstring ---
- @(link_name="free") _unix_free :: proc(ptr: rawptr) ---
-
-}
-when ODIN_OS == .Darwin || ODIN_OS == .FreeBSD {
- @(private)
- foreign libc {
- @(link_name="__error") __error :: proc() -> ^i32 ---
- }
-} else when ODIN_OS == .OpenBSD || ODIN_OS == .NetBSD {
- @(private)
- foreign libc {
- @(link_name="__errno") __error :: proc() -> ^i32 ---
- }
-} else {
- @(private)
- foreign libc {
- @(link_name="__errno_location") __error :: proc() -> ^i32 ---
- }
-}