[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-core-devel
Subject: [patch] KLocale: minor optimization + use safer qgetenv
From: Jarosław Staniek <js () iidea ! pl>
Date: 2008-03-06 11:50:06
Message-ID: 47CFDA6E.60102 () iidea ! pl
[Download RAW message or body]
For review.
- Minor optimization: before we've typically iterated twice (in
initLanguageList() and setLanguage() over lost of (typically) empty strings.
- Use safer qgetenv, based on getenv_s under msvc>=2k5 and just ::getenv
elsewhere.
I shall also propose more changes to qgetenv (and qputenv), especially in
places where we cast to QByteArray or QString.
--
regards / pozdrawiam, Jaroslaw Staniek
Sponsored by OpenOffice Polska (http://www.openoffice.com.pl/en) to work on
Kexi & KOffice (http://www.kexi.pl/en, http://www.koffice.org/kexi)
KDE Libraries for MS Windows (http://windows.kde.org)
["klocale-getenv.patch" (text/plain)]
Index: kdecore/localization/klocale.cpp
===================================================================
--- kdecore/localization/klocale.cpp (revision 782853)
+++ kdecore/localization/klocale.cpp (working copy)
@@ -275,6 +275,13 @@
}
}
+static inline void getLanguagesFromVariable(QStringList& list, char* variable)
+{
+ QByteArray var( qgetenv(variable) );
+ if (!var.isEmpty())
+ list += QFile::decodeName(var).split(':');
+}
+
void KLocalePrivate::initLanguageList(KConfig *config, bool useEnv)
{
KConfigGroup cg(config, "Locale");
@@ -299,10 +306,12 @@
// Collect languages set by KDE_LANG.
if (useEnv)
- list += QFile::decodeName(getenv("KDE_LANG")).split(':');
+ getLanguagesFromVariable(list, "KDE_LANG");
// Collect languages set by KDE config.
- list += cg.readEntry("Language", QString()).split(':');
+ QString languages(cg.readEntry("Language", QString()));
+ if (!languages.isEmpty())
+ list += languages.split(':');
// Collect languages read from environment variables by gettext(3).
QStringList rawList;
@@ -311,14 +320,13 @@
// LANGUAGE should contain colon-separated list of exact language codes,
// so add them directly.
- list += QFile::decodeName(getenv("LANGUAGE")).split(':');
+ getLanguagesFromVariable(list, "LANGUAGE");
// Other environment variables contain locale string, which should
// be checked for all combinations yielding language codes.
- QStringList rawList;
- rawList += QFile::decodeName(getenv("LC_ALL"));
- rawList += QFile::decodeName(getenv("LC_MESSAGES"));
- rawList += QFile::decodeName(getenv("LANG"));
+ getLanguagesFromVariable(rawList, "LC_ALL");
+ getLanguagesFromVariable(rawList, "LC_MESSAGES");
+ getLanguagesFromVariable(rawList, "LANG");
}
#ifdef Q_WS_WIN // how about Mac?
rawList += QLocale::system().name(); // fall back to the system language
@@ -2015,7 +2023,7 @@
{
// If the following environment variable is set, assume all filenames
// are in UTF-8 regardless of the current C locale.
- utf8FileEncoding = getenv("KDE_UTF8_FILENAMES") != 0;
+ utf8FileEncoding = !qgetenv("KDE_UTF8_FILENAMES").isEmpty();
if (utf8FileEncoding)
{
QFile::setEncodingFunction(KLocalePrivate::encodeFileNameUTF8);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic