* 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>
* src/filesystem/path.cc (path::compare): Do not copy strings.
* acinclude.m4 (GLIBCXX_ENABLE_FILESYSTEM_TS): Disable when <dirent.h>
is not available.
(GLIBCXX_CHECK_FILESYSTEM_DEPS): Check for fchmodat.

View file

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