summaryrefslogtreecommitdiff
path: root/sal
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2017-03-21 17:02:22 +0100
committerStephan Bergmann <sbergman@redhat.com>2017-03-21 17:02:22 +0100
commit9abbeb95d41d8fb3e3c4ec74221666e60a44e747 (patch)
tree08964d5d4abb0422a843977af3ba67768b8e593c /sal
parent17ca47da257d7633e816a5a1b935783d1f089b9f (diff)
Argument to parse_locale is never null
Change-Id: I610d3637f4a4520ef4eefed29851727f519de02c
Diffstat (limited to 'sal')
-rw-r--r--sal/osl/unx/nlsupport.cxx74
1 files changed, 35 insertions, 39 deletions
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) || \