lexically_relative: ignore trailing slash on base

Previously,

    fs::path("a/b").lexically_relative("a/")

would incorrectly return "../b". Now it returns "b".
This commit is contained in:
Michael M 2020-03-22 16:26:59 -07:00
parent 26077f272e
commit e3201da883
2 changed files with 2 additions and 1 deletions

View File

@ -2683,7 +2683,7 @@ GHC_INLINE path path::lexically_relative(const path& base) const
}
int count = 0;
for (const auto& element : input_iterator_range<const_iterator>(b, base.end())) {
if (element != "." && element != "..") {
if (element != "." && element != "" && element != "..") {
++count;
}
else if (element == "..") {

View File

@ -882,6 +882,7 @@ TEST_CASE("30.10.8.4.11 path generation", "[filesystem][path][fs.path.gen]")
CHECK(fs::path("a/b/c").lexically_relative("a/b/c/x/y") == "../..");
CHECK(fs::path("a/b/c").lexically_relative("a/b/c") == ".");
CHECK(fs::path("a/b").lexically_relative("c/d") == "../../a/b");
CHECK(fs::path("a/b").lexically_relative("a/") == "b");
if (has_host_root_name_support()) {
CHECK(fs::path("//host1/foo").lexically_relative("//host2.bar") == "");
}