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

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


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

New commits:
commit 61ecebe0d0febe8429d965355356a9f0f34b323b
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Mar 23 11:38:01 2017 +0100

    Revert "Handle "POSIX" in parse_locale"
    
    This reverts commit 646cbbfbc67b07d5f58166228bca1ac710175cd0 for now.  Appears
    that it made CppunitTest_sal_osl fail at least on some macOS builds, for reasons
    not yet clear to me

diff --git a/sal/osl/unx/nlsupport.cxx b/sal/osl/unx/nlsupport.cxx
index d6359ee6c538..589439fffe94 100644
--- a/sal/osl/unx/nlsupport.cxx
+++ b/sal/osl/unx/nlsupport.cxx
@@ -173,51 +173,52 @@ static rtl_Locale * parse_locale( const char * locale )
 {
     assert(locale != nullptr);
 
-    if (*locale == '\0' || std::strcmp(locale, "C")
-        || std::strcmp(locale, "POSIX"))
-    {
-        return rtl_locale_register(u"C", u"", u"");
-    }
+    static sal_Unicode c_locale[2] = { (sal_Unicode) 'C', 0 };
 
     size_t len = strlen( locale );
 
-    rtl_uString * pLanguage = nullptr;
-    rtl_uString * pCountry  = nullptr;
-    rtl_uString * pVariant  = nullptr;
+    if( len >= 2 )
+    {
+        rtl_uString * pLanguage = nullptr;
+        rtl_uString * pCountry  = nullptr;
+        rtl_uString * pVariant  = nullptr;
 
-    size_t offset = len;
+        size_t offset = 2;
 
-    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 : u"", pVariant ? pVariant->buffer : u"" );
+        ret =  rtl_locale_register( pLanguage->buffer, pCountry ? pCountry->buffer : c_locale + 1, pVariant ? pVariant->buffer : c_locale + 1 );
 
-    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;
+        return ret;
+    }
+    else
+        return rtl_locale_register( c_locale, c_locale + 1, c_locale + 1 );
 }
 
 #if defined(LINUX) || defined(__sun) || defined(NETBSD) || \


More information about the Libreoffice-commits mailing list