A very simple one. PR libstdc++/71037 * src/filesystem/ops.cc (canonical(const path&, const path&)): Add base path to exception. * testsuite/experimental/filesystem/operations/canonical.cc: Test paths contained in exception.
Tested x86_64-linux, committed to trunk. Backports to follow.
commit 73d984ba4a820916438e9dfff98c07ac73bd5ec1 Author: Jonathan Wakely <jwak...@redhat.com> Date: Tue May 10 13:13:33 2016 +0100 libstdc++/71037 Add base path to filesystem::canonical exceptions PR libstdc++/71037 * src/filesystem/ops.cc (canonical(const path&, const path&)): Add base path to exception. * testsuite/experimental/filesystem/operations/canonical.cc: Test paths contained in exception. diff --git a/libstdc++-v3/src/filesystem/ops.cc b/libstdc++-v3/src/filesystem/ops.cc index aa26caf..e18c751 100644 --- a/libstdc++-v3/src/filesystem/ops.cc +++ b/libstdc++-v3/src/filesystem/ops.cc @@ -220,8 +220,9 @@ fs::canonical(const path& p, const path& base) { error_code ec; path can = canonical(p, base, ec); - if (ec.value()) - _GLIBCXX_THROW_OR_ABORT(filesystem_error("cannot canonicalize", p, ec)); + if (ec) + _GLIBCXX_THROW_OR_ABORT(filesystem_error("cannot canonicalize", p, base, + ec)); return can; } diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc index e13c4bf..5b4c573 100644 --- a/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc +++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc @@ -59,8 +59,28 @@ test01() VERIFY( !ec ); } +void +test02() +{ +#if __cpp_exceptions + bool test __attribute__((unused)) = false; + + fs::path p = "rel", base = __gnu_test::nonexistent_path(); + fs::path e1, e2; + try { + canonical(p, base); + } catch (const fs::filesystem_error& e) { + e1 = e.path1(); + e2 = e.path2(); + } + VERIFY( e1 == p ); + VERIFY( e2 == base ); +#endif +} + int main() { test01(); + test02(); }