util: Use (thread-safe) uselocale()

Our helper method to translate a string according to the LC_TIME
setting uses the no-thread-safe setlocale(). While that's not an
issue in practice given that all JS code shares a single thread,
I was pointed to a better alternative when adopting the same
handling in gnome-desktop's wallclock[0].

[0] https://gitlab.gnome.org/GNOME/gnome-desktop/merge_requests/17

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/292
This commit is contained in:
Florian Müllner 2018-09-11 03:17:20 +02:00
parent e92477a752
commit f4a64f77f2

View File

@ -235,14 +235,21 @@ shell_util_translate_time_string (const char *str)
const char *locale = g_getenv ("LC_TIME"); const char *locale = g_getenv ("LC_TIME");
const char *res; const char *res;
char *sep; char *sep;
locale_t old_loc;
locale_t loc = (locale_t) 0;
if (locale) if (locale)
setlocale (LC_MESSAGES, locale); loc = newlocale (LC_MESSAGES_MASK, locale, (locale_t) 0);
old_loc = uselocale (loc);
sep = strchr (str, '\004'); sep = strchr (str, '\004');
res = g_dpgettext (NULL, str, sep ? sep - str + 1 : 0); res = g_dpgettext (NULL, str, sep ? sep - str + 1 : 0);
setlocale (LC_MESSAGES, ""); uselocale (old_loc);
if (loc != (locale_t) 0)
freelocale (loc);
return res; return res;
} }