utils: improve locale_workaround

Fixes: #2270.
This commit is contained in:
Dirk-Jan C. Binnema 2022-06-03 22:01:57 +03:00
parent 0fe8f9a613
commit 015a7ee0cb
2 changed files with 22 additions and 8 deletions

View File

@ -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;
}

View File

@ -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();
}