mirror of https://github.com/djcb/mu.git
utils: add locale_workaround
Attempt to work around some locale handling throwing in some systems. "locale::facet::_S_create_c_locale name not valid" Ugly, but maybe it helps.
This commit is contained in:
parent
7f8260d5ed
commit
c4cc9795dc
|
@ -19,6 +19,7 @@
|
|||
|
||||
#ifndef _XOPEN_SOURCE
|
||||
#define _XOPEN_SOURCE
|
||||
#include <stdexcept>
|
||||
#endif /*_XOPEN_SOURCE*/
|
||||
|
||||
#include <array>
|
||||
|
@ -606,3 +607,21 @@ Mu::TempDir::~TempDir()
|
|||
|
||||
g_debug("removed '%s'", path_.c_str());
|
||||
}
|
||||
|
||||
bool
|
||||
Mu::locale_workaround()
|
||||
{
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -147,22 +147,13 @@ std::string date_to_time_t_string(int64_t t);
|
|||
std::string time_to_string(const std::string& frm, time_t t, bool utc = false) G_GNUC_CONST;
|
||||
|
||||
|
||||
// /**
|
||||
// * Create a std::string by consuming a gchar* array; this takes ownership
|
||||
// * of str which should no longer be used.
|
||||
// *
|
||||
// * @param str a gchar* or NULL (latter taken as "")
|
||||
// *
|
||||
// * @return a std::string
|
||||
// */
|
||||
// static inline std::string
|
||||
// from_gchars(gchar*&& str)
|
||||
// {
|
||||
// std::string s{str ? str : ""};
|
||||
// g_free(str);
|
||||
/**
|
||||
* Hack to avoid locale crashes
|
||||
*
|
||||
* @return true if setting locale worked; false otherwise
|
||||
*/
|
||||
bool locale_workaround();
|
||||
|
||||
// return s;
|
||||
// }
|
||||
|
||||
// https://stackoverflow.com/questions/19053351/how-do-i-use-a-custom-deleter-with-a-stdunique-ptr-member
|
||||
template <auto fn>
|
||||
|
|
Loading…
Reference in New Issue