[PATCH] libstdc++/71037 Add base path to filesystem::canonical exceptions
Jonathan Wakely
jwakely@redhat.com
Tue May 10 12:20:00 GMT 2016
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.
-------------- next part --------------
commit 73d984ba4a820916438e9dfff98c07ac73bd5ec1
Author: Jonathan Wakely <jwakely@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();
}
More information about the Libstdc++
mailing list