From: Jonathan Wakely Date: Fri, 1 May 2015 20:05:42 +0000 (+0100) Subject: * src/filesystem/path.cc (path::compare): Do not copy strings. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4ad376273d70e96e1b7d3eac126c3e1598246d5c;p=gcc.git * src/filesystem/path.cc (path::compare): Do not copy strings. From-SVN: r222704 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 7e070057105..a955a0f506d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,7 @@ 2015-05-01 Jonathan Wakely + * src/filesystem/path.cc (path::compare): Do not copy strings. + * acinclude.m4 (GLIBCXX_ENABLE_FILESYSTEM_TS): Disable when is not available. (GLIBCXX_CHECK_FILESYSTEM_DEPS): Check for fchmodat. diff --git a/libstdc++-v3/src/filesystem/path.cc b/libstdc++-v3/src/filesystem/path.cc index cc5780f1e14..7924732e646 100644 --- a/libstdc++-v3/src/filesystem/path.cc +++ b/libstdc++-v3/src/filesystem/path.cc @@ -107,17 +107,23 @@ namespace int path::compare(const path& p) const noexcept { + struct CmptRef + { + const path* ptr; + const string_type& native() const noexcept { return ptr->native(); } + }; + if (_M_type == _Type::_Multi && p._M_type == _Type::_Multi) return do_compare(_M_cmpts.begin(), _M_cmpts.end(), p._M_cmpts.begin(), p._M_cmpts.end()); else if (_M_type == _Type::_Multi) { - _Cmpt c[1] = { { p._M_pathname, p._M_type, 0 } }; + CmptRef c[1] = { { &p } }; return do_compare(_M_cmpts.begin(), _M_cmpts.end(), c, c+1); } else if (p._M_type == _Type::_Multi) { - _Cmpt c[1] = { { _M_pathname, _M_type, 0 } }; + CmptRef c[1] = { { this } }; return do_compare(c, c+1, p._M_cmpts.begin(), p._M_cmpts.end()); } else