From 83a896d0a9b40322b673101dd32a8d6b2acefe89 Mon Sep 17 00:00:00 2001 From: Tannin Date: Sun, 10 May 2015 16:00:15 +0200 Subject: - bugfix: case conversion could produce different local-dependent results between the time the vfs lookup map is set up and later when querying it. --- src/shared/util.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/shared/util.cpp') diff --git a/src/shared/util.cpp b/src/shared/util.cpp index 2ce88eca..75d80d83 100644 --- a/src/shared/util.cpp +++ b/src/shared/util.cpp @@ -22,6 +22,7 @@ along with Mod Organizer. If not, see . #include "error_report.h" #include +#include #include #include #include @@ -91,29 +92,38 @@ std::wstring ToWString(const std::string &source, bool utf8) return result; } +static std::locale loc(""); +static auto locToLowerW = [] (wchar_t in) -> wchar_t { + return std::tolower(in, loc); +}; + +static auto locToLower = [] (char in) -> char { + return std::tolower(in, loc); +}; + std::string &ToLower(std::string &text) { - std::transform(text.begin(), text.end(), text.begin(), ::tolower); + std::transform(text.begin(), text.end(), text.begin(), locToLower); return text; } std::string ToLower(const std::string &text) { std::string result = text; - std::transform(result.begin(), result.end(), result.begin(), ::tolower); + std::transform(result.begin(), result.end(), result.begin(), locToLower); return result; } std::wstring &ToLower(std::wstring &text) { - std::transform(text.begin(), text.end(), text.begin(), ::towlower); + std::transform(text.begin(), text.end(), text.begin(), locToLowerW); return text; } std::wstring ToLower(const std::wstring &text) { std::wstring result = text; - std::transform(result.begin(), result.end(), result.begin(), ::towlower); + std::transform(result.begin(), result.end(), result.begin(), locToLowerW); return result; } -- cgit v1.3.1