diff options
| author | Tannin <devnull@localhost> | 2015-05-10 16:00:15 +0200 |
|---|---|---|
| committer | Tannin <devnull@localhost> | 2015-05-10 16:00:15 +0200 |
| commit | 83a896d0a9b40322b673101dd32a8d6b2acefe89 (patch) | |
| tree | e3d493c75127ae566f1517724db8e9648d9d31e0 /src/shared/util.cpp | |
| parent | 209fe5cab5efb482c7e2383df2e1eacf7f05456a (diff) | |
- bugfix: case conversion could produce different local-dependent results
between the time the vfs lookup map is set up and later when querying it.
Diffstat (limited to 'src/shared/util.cpp')
| -rw-r--r-- | src/shared/util.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
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 <http://www.gnu.org/licenses/>. #include "error_report.h"
#include <sstream>
+#include <locale>
#include <algorithm>
#include <DbgHelp.h>
#include <set>
@@ -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;
}
|
