libstdc++/71037 Add base path to filesystem::canonical exceptions

Backport from mainline
2016-05-10  Jonathan Wakely  <jwakely@redhat.com>

	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.

From-SVN: r236714
This commit is contained in:
Jonathan Wakely 2016-05-25 16:42:57 +01:00 committed by Jonathan Wakely
parent 47cc02ad78
commit aecaeabf8d
3 changed files with 34 additions and 2 deletions

View File

@ -1,3 +1,14 @@
2016-05-25 Jonathan Wakely <jwakely@redhat.com>
Backport from mainline
2016-05-10 Jonathan Wakely <jwakely@redhat.com>
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.
2016-05-25 Jonathan Wakely <jwakely@redhat.com>
Backport from mainline

View File

@ -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;
}

View File

@ -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();
}