summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/pure/os.nim2
-rw-r--r--tests/stdlib/tos.nim4
2 files changed, 6 insertions, 0 deletions
diff --git a/lib/pure/os.nim b/lib/pure/os.nim
index a6b6ccffe..3b1421cb5 100644
--- a/lib/pure/os.nim
+++ b/lib/pure/os.nim
@@ -353,8 +353,10 @@ proc relativePath*(path, base: string; sep = DirSep): string {.
     assert relativePath("/Users///me/bar//z.nim", "//Users/", '/') == "me/bar/z.nim"
     assert relativePath("/Users/me/bar/z.nim", "/Users/me", '/') == "bar/z.nim"
     assert relativePath("", "/users/moo", '/') == ""
+    assert relativePath("foo", ".", '/') == "foo"
 
   if path.len == 0: return ""
+  let base = if base == ".": "" else: base
 
   when doslikeFileSystem:
     if isAbsolute(path) and isAbsolute(base):
diff --git a/tests/stdlib/tos.nim b/tests/stdlib/tos.nim
index 35ea34841..48202157a 100644
--- a/tests/stdlib/tos.nim
+++ b/tests/stdlib/tos.nim
@@ -334,6 +334,10 @@ block ospaths:
   doAssert relativePath("/foo", "/fOO", '/') == (when FileSystemCaseSensitive: "../foo" else: "")
   doAssert relativePath("/foO", "/foo", '/') == (when FileSystemCaseSensitive: "../foO" else: "")
 
+  doAssert relativePath("foo", ".", '/') == "foo"
+  doAssert relativePath(".", ".", '/') == "."
+  doAssert relativePath("..", ".", '/') == ".."
+
   when doslikeFileSystem:
     doAssert relativePath(r"c:\foo.nim", r"C:\") == r"foo.nim"
     doAssert relativePath(r"c:\foo\bar\baz.nim", r"c:\foo") == r"bar\baz.nim"