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:
parent
e92477a752
commit
f4a64f77f2
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user