From b2a8d8aea4b45eb350441fc75b7f507deaafc580 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 7 Jun 2023 06:57:15 +0200 Subject: [PATCH] Codechange: use std::string for Windows' ISO code mangling --- src/os/windows/win32.cpp | 18 ++++++++---------- src/strings.cpp | 2 +- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index 73cf4dc3f9..23d68dc3ed 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -541,23 +541,21 @@ const char *GetCurrentLocale(const char *) static WCHAR _cur_iso_locale[16] = L""; -void Win32SetCurrentLocaleName(const char *iso_code) +void Win32SetCurrentLocaleName(std::string iso_code) { /* Convert the iso code into the format that windows expects. */ - char iso[16]; - if (strcmp(iso_code, "zh_TW") == 0) { - strecpy(iso, "zh-Hant", lastof(iso)); - } else if (strcmp(iso_code, "zh_CN") == 0) { - strecpy(iso, "zh-Hans", lastof(iso)); + if (iso_code == "zh_TW") { + iso_code = "zh-Hant"; + } else if (iso_code == "zh_CN") { + iso_code = "zh-Hans"; } else { /* Windows expects a '-' between language and country code, but we use a '_'. */ - strecpy(iso, iso_code, lastof(iso)); - for (char *c = iso; *c != '\0'; c++) { - if (*c == '_') *c = '-'; + for (char &c : iso_code) { + if (c == '_') c = '-'; } } - MultiByteToWideChar(CP_UTF8, 0, iso, -1, _cur_iso_locale, lengthof(_cur_iso_locale)); + MultiByteToWideChar(CP_UTF8, 0, iso_code.c_str(), -1, _cur_iso_locale, lengthof(_cur_iso_locale)); } int OTTDStringCompare(std::string_view s1, std::string_view s2) diff --git a/src/strings.cpp b/src/strings.cpp index ea1c77c29d..ebe05671be 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1887,7 +1887,7 @@ bool ReadLanguagePack(const LanguageMetadata *lang) SetCurrentGrfLangID(_current_language->newgrflangid); #ifdef _WIN32 - extern void Win32SetCurrentLocaleName(const char *iso_code); + extern void Win32SetCurrentLocaleName(std::string iso_code); Win32SetCurrentLocaleName(_current_language->isocode); #endif