[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