fs/Charset: enable RVO in FixSeparators()

This commit is contained in:
Max Kellermann 2020-04-03 16:11:46 +02:00
parent 915c48f748
commit a269fc988b

View File

@ -74,19 +74,21 @@ GetFSCharset() noexcept
#endif #endif
} }
static inline PathTraitsUTF8::string && static inline PathTraitsUTF8::string
FixSeparators(PathTraitsUTF8::string &&s) FixSeparators(const PathTraitsUTF8::string_view _s)
{ {
// For whatever reason GCC can't convert constexpr to value reference. // For whatever reason GCC can't convert constexpr to value reference.
// This leads to link errors when passing separators directly. // This leads to link errors when passing separators directly.
auto to = PathTraitsUTF8::SEPARATOR; auto to = PathTraitsUTF8::SEPARATOR;
decltype(to) from = PathTraitsFS::SEPARATOR; decltype(to) from = PathTraitsFS::SEPARATOR;
PathTraitsUTF8::string s(_s);
if (from != to) if (from != to)
/* convert backslash to slash on WIN32 */ /* convert backslash to slash on WIN32 */
std::replace(s.begin(), s.end(), from, to); std::replace(s.begin(), s.end(), from, to);
return std::move(s); return s;
} }
PathTraitsUTF8::string PathTraitsUTF8::string
@ -99,7 +101,7 @@ PathToUTF8(PathTraitsFS::const_pointer path_fs)
#ifdef _WIN32 #ifdef _WIN32
const auto buffer = WideCharToMultiByte(CP_UTF8, path_fs); const auto buffer = WideCharToMultiByte(CP_UTF8, path_fs);
return FixSeparators(PathTraitsUTF8::string(buffer)); return FixSeparators(buffer);
#else #else
#ifdef HAVE_FS_CHARSET #ifdef HAVE_FS_CHARSET
if (fs_converter == nullptr) if (fs_converter == nullptr)
@ -108,7 +110,7 @@ PathToUTF8(PathTraitsFS::const_pointer path_fs)
#ifdef HAVE_FS_CHARSET #ifdef HAVE_FS_CHARSET
const auto buffer = fs_converter->ToUTF8(path_fs); const auto buffer = fs_converter->ToUTF8(path_fs);
return FixSeparators(PathTraitsUTF8::string(buffer)); return FixSeparators(buffer);
#endif #endif
#endif #endif
} }