* src/filesystem/path.cc (path::compare): Do not copy strings.

From-SVN: r222704
This commit is contained in:
Jonathan Wakely 2015-05-01 21:05:42 +01:00 committed by Jonathan Wakely
parent bf53e6a9dd
commit 4ad376273d
2 changed files with 10 additions and 2 deletions

View File

@ -1,5 +1,7 @@
2015-05-01 Jonathan Wakely <jwakely@redhat.com> 2015-05-01 Jonathan Wakely <jwakely@redhat.com>
* src/filesystem/path.cc (path::compare): Do not copy strings.
* acinclude.m4 (GLIBCXX_ENABLE_FILESYSTEM_TS): Disable when <dirent.h> * acinclude.m4 (GLIBCXX_ENABLE_FILESYSTEM_TS): Disable when <dirent.h>
is not available. is not available.
(GLIBCXX_CHECK_FILESYSTEM_DEPS): Check for fchmodat. (GLIBCXX_CHECK_FILESYSTEM_DEPS): Check for fchmodat.

View File

@ -107,17 +107,23 @@ namespace
int int
path::compare(const path& p) const noexcept 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) if (_M_type == _Type::_Multi && p._M_type == _Type::_Multi)
return do_compare(_M_cmpts.begin(), _M_cmpts.end(), return do_compare(_M_cmpts.begin(), _M_cmpts.end(),
p._M_cmpts.begin(), p._M_cmpts.end()); p._M_cmpts.begin(), p._M_cmpts.end());
else if (_M_type == _Type::_Multi) 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); return do_compare(_M_cmpts.begin(), _M_cmpts.end(), c, c+1);
} }
else if (p._M_type == _Type::_Multi) 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()); return do_compare(c, c+1, p._M_cmpts.begin(), p._M_cmpts.end());
} }
else else