Commit 345d2d03 by Jonathan Wakely Committed by Jonathan Wakely

Fix undefined references in libstdc++fs.a

The recent patch for PR 83306 removed the fs_err_concat functions that
were used by the experimental::filesystem::filesystem_error class as
well. This fixes it by doing the string generation directly in
filesystem_error::_M_gen_what() instead of using the removed function.

	PR libstdc++/83306
	* src/filesystem/path.cc (filesystem_error::_M_gen_what()): Create
	string directly, instead of calling fs_err_concat.

From-SVN: r266569
parent 0a1369fa
2018-11-28 Jonathan Wakely <jwakely@redhat.com> 2018-11-28 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/83306
* src/filesystem/path.cc (filesystem_error::_M_gen_what()): Create
string directly, instead of calling fs_err_concat.
PR libstdc++/83511 PR libstdc++/83511
* include/std/string_view (basic_string_view::substr): Add default * include/std/string_view (basic_string_view::substr): Add default
argument to first parameter. argument to first parameter.
......
...@@ -485,28 +485,32 @@ fs::hash_value(const path& p) noexcept ...@@ -485,28 +485,32 @@ fs::hash_value(const path& p) noexcept
return seed; return seed;
} }
namespace std #include <experimental/string_view>
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
namespace filesystem
{
extern string
fs_err_concat(const string& __what, const string& __path1,
const string& __path2);
} // namespace filesystem
namespace experimental::filesystem::v1 {
_GLIBCXX_BEGIN_NAMESPACE_CXX11
std::string filesystem_error::_M_gen_what() std::string
{ fs::filesystem_error::_M_gen_what()
using std::filesystem::fs_err_concat; {
return fs_err_concat(system_error::what(), _M_path1.u8string(), const std::string pstr1 = _M_path1.u8string();
_M_path2.u8string()); const std::string pstr2 = _M_path2.u8string();
} experimental::string_view s = this->system_error::what();
const size_t len = 18 + s.length()
_GLIBCXX_END_NAMESPACE_CXX11 + (pstr1.length() ? pstr1.length() + 3 : 0)
} // namespace experimental::filesystem::v1 + (pstr2.length() ? pstr2.length() + 3 : 0);
std::string w;
_GLIBCXX_END_NAMESPACE_VERSION w.reserve(len);
} // namespace std w = "filesystem error: ";
w.append(s.data(), s.length());
if (!pstr1.empty())
{
w += " [";
w += pstr1;
w += ']';
}
if (!pstr1.empty())
{
w += " [";
w += pstr2;
w += ']';
}
return w;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment