From 25d3539da7b1e6fd4560efcee6037df34a9c549a Mon Sep 17 00:00:00 2001 From: Timothee Cour Date: Tue, 18 Dec 2018 03:43:25 -0800 Subject: [PATCH] [os] fix #10017 regression, fix #10025 regression (#10018) * [os] fix #10017 regression * [os] fix #10025 regression --- lib/pure/pathnorm.nim | 3 ++- 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 4a7d74bf89..ca869fd037 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 66ca3de332..ed3737844e 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"/"