diff options
-rw-r--r-- | lib/pure/pathnorm.nim | 3 | ||||
-rw-r--r-- | tests/stdlib/tos.nim | 7 |
2 files changed, 7 insertions, 3 deletions
diff --git a/lib/pure/pathnorm.nim b/lib/pure/pathnorm.nim index 4a7d74bf8..ca869fd03 100644 --- a/lib/pure/pathnorm.nim +++ b/lib/pure/pathnorm.nim @@ -86,6 +86,7 @@ proc addNormalizePath*(x: string; result: var string; state: var int; dirSep = D result.add dirSep result.add substr(x, b[0], b[1]) inc state, 2 + if result == "" and x != "": result = "." proc normalizePath*(path: string; dirSep = DirSep): string = ## Example: @@ -96,7 +97,7 @@ proc normalizePath*(path: string; dirSep = DirSep): string = ## ## - Turns multiple slashes into single slashes. ## - Resolves '/foo/../bar' to '/bar'. - ## - Removes './' from the path. + ## - Removes './' from the path (but "foo/.." becomes ".") result = newStringOfCap(path.len) var state = 0 addNormalizePath(path, result, state, dirSep) diff --git a/tests/stdlib/tos.nim b/tests/stdlib/tos.nim index 66ca3de33..ed3737844 100644 --- a/tests/stdlib/tos.nim +++ b/tests/stdlib/tos.nim @@ -190,14 +190,17 @@ block walkDirRec: removeDir("walkdir_test") block normalizedPath: + doAssert normalizedPath("") == "" block relative: - doAssert normalizedPath(".") == "" + doAssert normalizedPath(".") == "." + doAssert normalizedPath("foo/..") == "." + doAssert normalizedPath("foo//../bar/.") == "bar" doAssert normalizedPath("..") == ".." doAssert normalizedPath("../") == ".." doAssert normalizedPath("../..") == unixToNativePath"../.." doAssert normalizedPath("../a/..") == ".." doAssert normalizedPath("../a/../") == ".." - doAssert normalizedPath("./") == "" + doAssert normalizedPath("./") == "." block absolute: doAssert normalizedPath("/") == unixToNativePath"/" |