anoia: make dirname handle tralning / like posix

This commit is contained in:
Daniel Barlow
2025-03-24 22:37:24 +00:00
parent e5cfd41013
commit 8440378a39
2 changed files with 21 additions and 1 deletions

View File

@@ -25,8 +25,27 @@
(fn basename [path]
(string.match path ".*/([^/]-)$"))
(fn dirname [path]
(string.match path "(.*)/[^/]-$"))
(let [stripped (string.match path "(.-)/*$")]
(pick-values
1
(if (not path) "."
(= path "") "."
(not stripped) "."
(= stripped "") "/"
(string.match stripped ".+/.-") (stripped:gsub "(.*)(/.*)" "%1")
(string.match stripped "/") "/"
"."))))
(define-tests
;; these are examples from dirname(3)
(expect= (dirname "/usr/lib") "/usr")
(expect= (dirname "/usr/") "/")
(expect= (dirname "usr") ".")
(expect= (dirname "/") "/")
(expect= (dirname ".") ".")
(expect= (dirname "..") "."))
(fn append-path [dirname filename]
(let [base (or (string.match dirname "(.*)/$") dirname)