sal/osl/unx/nlsupport.cxx |   27 +++++++++++----------------
 1 file changed, 11 insertions(+), 16 deletions(-)

New commits:
commit 17ca47da257d7633e816a5a1b935783d1f089b9f
Author: Stephan Bergmann <sberg...@redhat.com>
Date:   Tue Mar 21 16:33:34 2017 +0100

    On Linux etc., obtain locale value from env vars instead of setlocale
    
    setlocale has the drawbacks that it is racy and that it sets global state, 
so
    better avoid it.  The way LC_ALL, LC_CTYPE, LANG are honoured is as 
suggested by
    SUSv4, then falling back to "C".
    
    Change-Id: I606ecc01d37a0a9067a90e6dcce098009094493c

diff --git a/sal/osl/unx/nlsupport.cxx b/sal/osl/unx/nlsupport.cxx
index 97c6c62cdc99..61090d969011 100644
--- a/sal/osl/unx/nlsupport.cxx
+++ b/sal/osl/unx/nlsupport.cxx
@@ -643,22 +643,17 @@ rtl_TextEncoding osl_getTextEncodingFromLocale( 
rtl_Locale * pLocale )
 
 void imp_getProcessLocale( rtl_Locale ** ppLocale )
 {
-    char * locale;
-
-    /* basic thread safeness */
-    pthread_mutex_lock( &aLocalMutex );
-
-    /* set the locale defined by the env vars */
-    locale = setlocale( LC_CTYPE, "" );
-
-    /* fallback to the current locale */
-    if( nullptr == locale )
-        locale = setlocale( LC_CTYPE, nullptr );
-
-    /* return the LC_CTYPE locale */
-    *ppLocale = parse_locale( locale );
-
-    pthread_mutex_unlock( &aLocalMutex );
+    char const * locale = getenv("LC_ALL");
+    if (locale == nullptr || *locale == '\0') {
+        locale = getenv("LC_CTYPE");
+        if (locale == nullptr || *locale == '\0') {
+            locale = getenv("LANG");
+            if (locale == nullptr || *locale == '\0') {
+                locale = "C";
+            }
+        }
+    }
+    *ppLocale = parse_locale(locale);
 }
 
 /*****************************************************************************
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to