From f4a64f77f2565eb5895e9245a67f96f4b3a226e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 11 Sep 2018 03:17:20 +0200 Subject: [PATCH] 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 --- src/shell-util.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/shell-util.c b/src/shell-util.c index dfc13cd21..ed6593078 100644 --- a/src/shell-util.c +++ b/src/shell-util.c @@ -235,14 +235,21 @@ shell_util_translate_time_string (const char *str) const char *locale = g_getenv ("LC_TIME"); const char *res; char *sep; + locale_t old_loc; + locale_t loc = (locale_t) 0; if (locale) - setlocale (LC_MESSAGES, locale); + loc = newlocale (LC_MESSAGES_MASK, locale, (locale_t) 0); + + old_loc = uselocale (loc); sep = strchr (str, '\004'); 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; }