diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index 59952bd107f..35aa0df0ef6 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -167,48 +167,35 @@ QLocale::Country QLocalePrivate::codeToCountry(const QChar *code, int len) Q_DEC return QLocale::AnyCountry; } -QString QLocalePrivate::languageToCode(QLocale::Language language) +QLatin1String QLocalePrivate::languageToCode(QLocale::Language language) { if (language == QLocale::AnyLanguage) - return QString(); + return QLatin1String(); if (language == QLocale::C) return QLatin1String("C"); const unsigned char *c = language_code_list + 3*(uint(language)); - QString code(c[2] == 0 ? 2 : 3, Qt::Uninitialized); + return QLatin1String(reinterpret_cast(c), c[2] == 0 ? 2 : 3); - code[0] = ushort(c[0]); - code[1] = ushort(c[1]); - if (c[2] != 0) - code[2] = ushort(c[2]); - - return code; } -QString QLocalePrivate::scriptToCode(QLocale::Script script) +QLatin1String QLocalePrivate::scriptToCode(QLocale::Script script) { if (script == QLocale::AnyScript || script > QLocale::LastScript) - return QString(); + return QLatin1String(); const unsigned char *c = script_code_list + 4*(uint(script)); - return QString::fromLatin1((const char *)c, 4); + return QLatin1String(reinterpret_cast(c), 4); } -QString QLocalePrivate::countryToCode(QLocale::Country country) +QLatin1String QLocalePrivate::countryToCode(QLocale::Country country) { if (country == QLocale::AnyCountry) - return QString(); + return QLatin1String(); const unsigned char *c = country_code_list + 3*(uint(country)); - QString code(c[2] == 0 ? 2 : 3, Qt::Uninitialized); - - code[0] = ushort(c[0]); - code[1] = ushort(c[1]); - if (c[2] != 0) - code[2] = ushort(c[2]); - - return code; + return QLatin1String(reinterpret_cast(c), c[2] == 0 ? 2 : 3); } // http://www.unicode.org/reports/tr35/#Likely_Subtags diff --git a/src/corelib/tools/qlocale_p.h b/src/corelib/tools/qlocale_p.h index f7adb021b69..1c6e3e850b0 100644 --- a/src/corelib/tools/qlocale_p.h +++ b/src/corelib/tools/qlocale_p.h @@ -349,14 +349,13 @@ public: QByteArray bcp47Name(char separator = '-') const; - // ### QByteArray::fromRawData would be more optimal - inline QString languageCode() const { return QLocalePrivate::languageToCode(QLocale::Language(m_data->m_language_id)); } - inline QString scriptCode() const { return QLocalePrivate::scriptToCode(QLocale::Script(m_data->m_script_id)); } - inline QString countryCode() const { return QLocalePrivate::countryToCode(QLocale::Country(m_data->m_country_id)); } + inline QLatin1String languageCode() const { return QLocalePrivate::languageToCode(QLocale::Language(m_data->m_language_id)); } + inline QLatin1String scriptCode() const { return QLocalePrivate::scriptToCode(QLocale::Script(m_data->m_script_id)); } + inline QLatin1String countryCode() const { return QLocalePrivate::countryToCode(QLocale::Country(m_data->m_country_id)); } - static QString languageToCode(QLocale::Language language); - static QString scriptToCode(QLocale::Script script); - static QString countryToCode(QLocale::Country country); + static QLatin1String languageToCode(QLocale::Language language); + static QLatin1String scriptToCode(QLocale::Script script); + static QLatin1String countryToCode(QLocale::Country country); static QLocale::Language codeToLanguage(const QChar *code, int len) Q_DECL_NOTHROW; static QLocale::Language codeToLanguage(const QString &code) Q_DECL_NOTHROW { return codeToLanguage(code.data(), code.size()); } static QLocale::Language codeToLanguage(const QStringRef &code) Q_DECL_NOTHROW { return codeToLanguage(code.data(), code.size()); } diff --git a/src/corelib/tools/qtimezoneprivate_icu.cpp b/src/corelib/tools/qtimezoneprivate_icu.cpp index 887486f567b..a07b2593b9b 100644 --- a/src/corelib/tools/qtimezoneprivate_icu.cpp +++ b/src/corelib/tools/qtimezoneprivate_icu.cpp @@ -477,9 +477,10 @@ QList QIcuTimeZonePrivate::availableTimeZoneIds() const QList QIcuTimeZonePrivate::availableTimeZoneIds(QLocale::Country country) const { - QByteArray regionCode = QLocalePrivate::countryToCode(country).toUtf8(); + const QLatin1String regionCode = QLocalePrivate::countryToCode(country); + const QByteArray regionCodeUtf8 = QString(regionCode).toUtf8(); UErrorCode status = U_ZERO_ERROR; - UEnumeration *uenum = ucal_openCountryTimeZones(regionCode, &status); + UEnumeration *uenum = ucal_openCountryTimeZones(regionCodeUtf8.data(), &status); QList result; if (U_SUCCESS(status)) result = uenumToIdList(uenum); diff --git a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp index 5d13d9e4549..9248970c96d 100644 --- a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp @@ -2450,8 +2450,8 @@ void tst_QLocale::textDirection_data() default: break; } - QString testName = QLocalePrivate::languageToCode(QLocale::Language(language)); - QTest::newRow(testName.toLatin1().constData()) << language << int(QLocale::AnyScript) << rightToLeft; + const QLatin1String testName = QLocalePrivate::languageToCode(QLocale::Language(language)); + QTest::newRow(qPrintable(testName)) << language << int(QLocale::AnyScript) << rightToLeft; } QTest::newRow("pa_Arab") << int(QLocale::Punjabi) << int(QLocale::ArabicScript) << true; QTest::newRow("uz_Arab") << int(QLocale::Uzbek) << int(QLocale::ArabicScript) << true;