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
|
#ifndef _XOPEN_SOURCE
|
||||||
#define _XOPEN_SOURCE
|
#define _XOPEN_SOURCE
|
||||||
|
#include <stdexcept>
|
||||||
#endif /*_XOPEN_SOURCE*/
|
#endif /*_XOPEN_SOURCE*/
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
@ -606,3 +607,21 @@ Mu::TempDir::~TempDir()
|
||||||
|
|
||||||
g_debug("removed '%s'", path_.c_str());
|
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;
|
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
|
* Hack to avoid locale crashes
|
||||||
// * of str which should no longer be used.
|
*
|
||||||
// *
|
* @return true if setting locale worked; false otherwise
|
||||||
// * @param str a gchar* or NULL (latter taken as "")
|
*/
|
||||||
// *
|
bool locale_workaround();
|
||||||
// * @return a std::string
|
|
||||||
// */
|
|
||||||
// static inline std::string
|
|
||||||
// from_gchars(gchar*&& str)
|
|
||||||
// {
|
|
||||||
// std::string s{str ? str : ""};
|
|
||||||
// g_free(str);
|
|
||||||
|
|
||||||
// return s;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// https://stackoverflow.com/questions/19053351/how-do-i-use-a-custom-deleter-with-a-stdunique-ptr-member
|
// https://stackoverflow.com/questions/19053351/how-do-i-use-a-custom-deleter-with-a-stdunique-ptr-member
|
||||||
template <auto fn>
|
template <auto fn>
|
||||||
|
|
Loading…
Reference in New Issue