From 015a7ee0cbd7b035557d15ad36ea7583749e66a9 Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Fri, 3 Jun 2022 22:01:57 +0300 Subject: [PATCH] utils: improve locale_workaround Fixes: #2270. --- lib/utils/mu-utils.cc | 19 +++++++++++-------- lib/utils/tests/test-utils.cc | 11 +++++++++++ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/lib/utils/mu-utils.cc b/lib/utils/mu-utils.cc index e1c820f3..8f5dbae2 100644 --- a/lib/utils/mu-utils.cc +++ b/lib/utils/mu-utils.cc @@ -49,6 +49,8 @@ #include "mu-error.hh" #include "mu-option.hh" +#include "message/mu-message-file.hh" + using namespace Mu; namespace { @@ -642,20 +644,21 @@ Mu::TempDir::~TempDir() } bool -Mu::locale_workaround() +Mu::locale_workaround() try { // quite horrible... but some systems break otherwise with // https://github.com/djcb/mu/issues/2252 - for (auto&& loc : {"", "en_US.UTF-8", "C" }) { - try { - std::locale::global(std::locale(loc)); - return true; - } catch (const std::runtime_error& re) { - continue; - } + try { + std::locale::global(std::locale("")); + } catch (const std::runtime_error& re) { + g_setenv("LC_ALL", "C", 1); + std::locale::global(std::locale("")); } + return true; + +} catch (...) { return false; } diff --git a/lib/utils/tests/test-utils.cc b/lib/utils/tests/test-utils.cc index c09671d2..5eae911c 100644 --- a/lib/utils/tests/test-utils.cc +++ b/lib/utils/tests/test-utils.cc @@ -270,6 +270,16 @@ test_to_from_lexnum() g_assert_cmpuint(from_lexnum(to_lexnum(9876543)), ==, 9876543); } +static void +test_locale_workaround() +{ + g_assert_true(locale_workaround()); + + g_setenv("LC_ALL", "BOO", 1); + + g_assert_true(locale_workaround()); +} + int main(int argc, char* argv[]) @@ -287,6 +297,7 @@ main(int argc, char* argv[]) g_test_add_func("/utils/join", test_join); g_test_add_func("/utils/define-bitmap", test_define_bitmap); g_test_add_func("/utils/to-from-lexnum", test_to_from_lexnum); + g_test_add_func("/utils/locale-workaround", test_locale_workaround); return g_test_run(); }