[Libreoffice-commits] core.git: sal/osl

Stephan Bergmann sbergman at redhat.com
Thu Mar 23 10:10:16 UTC 2017


 sal/osl/unx/nlsupport.cxx |   67 ++++++++++++++++++++++------------------------
 1 file changed, 33 insertions(+), 34 deletions(-)

New commits:
commit 646cbbfbc67b07d5f58166228bca1ac710175cd0
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Mar 23 11:09:39 2017 +0100

    Handle "POSIX" in parse_locale
    
    Change-Id: Ib3ce9efd2933170777689db152d35f586f5afe2d

diff --git a/sal/osl/unx/nlsupport.cxx b/sal/osl/unx/nlsupport.cxx
index 589439fffe94..d6359ee6c538 100644
--- a/sal/osl/unx/nlsupport.cxx
+++ b/sal/osl/unx/nlsupport.cxx
@@ -173,52 +173,51 @@ static rtl_Locale * parse_locale( const char * locale )
 {
     assert(locale != nullptr);
 
-    static sal_Unicode c_locale[2] = { (sal_Unicode) 'C', 0 };
+    if (*locale == '\0' || std::strcmp(locale, "C")
+        || std::strcmp(locale, "POSIX"))
+    {
+        return rtl_locale_register(u"C", u"", u"");
+    }
 
     size_t len = strlen( locale );
 
-    if( len >= 2 )
-    {
-        rtl_uString * pLanguage = nullptr;
-        rtl_uString * pCountry  = nullptr;
-        rtl_uString * pVariant  = nullptr;
+    rtl_uString * pLanguage = nullptr;
+    rtl_uString * pCountry  = nullptr;
+    rtl_uString * pVariant  = nullptr;
 
-        size_t offset = 2;
+    size_t offset = len;
 
-        rtl_Locale * ret;
+    rtl_Locale * ret;
 
-        /* language is a two or three letter code */
-        if( (len > 3 && locale[3] == '_') || (len == 3 && locale[2] != '_') )
-            offset = 3;
+    /* language is a two or three letter code */
+    if( (len > 3 && locale[3] == '_') || (len == 3 && locale[2] != '_') )
+        offset = 3;
 
-        /* convert language code to unicode */
-        rtl_string2UString( &pLanguage, locale, offset, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS );
-        OSL_ASSERT(pLanguage != nullptr);
+    /* convert language code to unicode */
+    rtl_string2UString( &pLanguage, locale, offset, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS );
+    OSL_ASSERT(pLanguage != nullptr);
 
-        /* convert country code to unicode */
-        if( len >= offset+3 && locale[offset] == '_' )
-        {
-            rtl_string2UString( &pCountry, locale + offset + 1, 2, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS );
-            OSL_ASSERT(pCountry != nullptr);
-            offset += 3;
-        }
+    /* convert country code to unicode */
+    if( len >= offset+3 && locale[offset] == '_' )
+    {
+        rtl_string2UString( &pCountry, locale + offset + 1, 2, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS );
+        OSL_ASSERT(pCountry != nullptr);
+        offset += 3;
+    }
 
-        /* convert variant code to unicode - do not rely on "." as delimiter */
-        if( len > offset ) {
-            rtl_string2UString( &pVariant, locale + offset, len - offset, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS );
-            OSL_ASSERT(pVariant != nullptr);
-        }
+    /* convert variant code to unicode - do not rely on "." as delimiter */
+    if( len > offset ) {
+        rtl_string2UString( &pVariant, locale + offset, len - offset, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS );
+        OSL_ASSERT(pVariant != nullptr);
+    }
 
-        ret =  rtl_locale_register( pLanguage->buffer, pCountry ? pCountry->buffer : c_locale + 1, pVariant ? pVariant->buffer : c_locale + 1 );
+    ret =  rtl_locale_register( pLanguage->buffer, pCountry ? pCountry->buffer : u"", pVariant ? pVariant->buffer : u"" );
 
-        if (pVariant) rtl_uString_release(pVariant);
-        if (pCountry) rtl_uString_release(pCountry);
-        if (pLanguage) rtl_uString_release(pLanguage);
+    if (pVariant) rtl_uString_release(pVariant);
+    if (pCountry) rtl_uString_release(pCountry);
+    if (pLanguage) rtl_uString_release(pLanguage);
 
-        return ret;
-    }
-    else
-        return rtl_locale_register( c_locale, c_locale + 1, c_locale + 1 );
+    return ret;
 }
 
 #if defined(LINUX) || defined(__sun) || defined(NETBSD) || \


More information about the Libreoffice-commits mailing list