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

Stephan Bergmann sbergman at redhat.com
Tue Mar 21 16:02:55 UTC 2017


 sal/osl/unx/nlsupport.cxx |   74 +++++++++++++++++++++-------------------------
 1 file changed, 35 insertions(+), 39 deletions(-)

New commits:
commit 9abbeb95d41d8fb3e3c4ec74221666e60a44e747
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Mar 21 17:02:22 2017 +0100

    Argument to parse_locale is never null
    
    Change-Id: I610d3637f4a4520ef4eefed29851727f519de02c

diff --git a/sal/osl/unx/nlsupport.cxx b/sal/osl/unx/nlsupport.cxx
index 61090d969011..79797b25929e 100644
--- a/sal/osl/unx/nlsupport.cxx
+++ b/sal/osl/unx/nlsupport.cxx
@@ -172,58 +172,54 @@ static char * compose_locale( rtl_Locale * pLocale, char * buffer, size_t n )
 
 static rtl_Locale * parse_locale( const char * locale )
 {
+    assert(locale != nullptr);
+
     static sal_Unicode c_locale[2] = { (sal_Unicode) 'C', 0 };
 
-    /* check if locale contains a valid string */
-    if( locale )
-    {
-        size_t len = strlen( locale );
+    size_t len = strlen( locale );
 
-        if( len >= 2 )
-        {
-            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 = 2;
+        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 : c_locale + 1, pVariant ? pVariant->buffer : c_locale + 1 );
+        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;
-        }
-        else
-            return rtl_locale_register( c_locale, c_locale + 1, c_locale + 1 );
+        return ret;
     }
-
-    return nullptr;
+    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