diff options
Diffstat (limited to 'src/corelib/io/qsettings.cpp')
-rw-r--r-- | src/corelib/io/qsettings.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 413f5693f0..b61cba7f7d 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -299,7 +299,7 @@ QSettingsPrivate *QSettingsPrivate::create(const QString &fileName, QSettings::F } #endif -void QSettingsPrivate::processChild(QString key, ChildSpec spec, QMap<QString, QString> &result) +void QSettingsPrivate::processChild(QStringRef key, ChildSpec spec, QStringList &result) { if (spec != AllKeys) { int slashPos = key.indexOf(QLatin1Char('/')); @@ -312,7 +312,7 @@ void QSettingsPrivate::processChild(QString key, ChildSpec spec, QMap<QString, Q key.truncate(slashPos); } } - result.insert(key, QString()); + result.append(key.toString()); } void QSettingsPrivate::beginGroupOrArray(const QSettingsGroup &group) @@ -357,6 +357,7 @@ void QSettingsPrivate::requestUpdate() QStringList QSettingsPrivate::variantListToStringList(const QVariantList &l) { QStringList result; + result.reserve(l.count()); QVariantList::const_iterator it = l.constBegin(); for (; it != l.constEnd(); ++it) result.append(variantToString(*it)); @@ -374,7 +375,9 @@ QVariant QSettingsPrivate::stringListToVariantList(const QStringList &l) outStringList[i].remove(0, 1); } else { QVariantList variantList; - for (int j = 0; j < l.count(); ++j) + const int stringCount = l.count(); + variantList.reserve(stringCount); + for (int j = 0; j < stringCount; ++j) variantList.append(stringToVariant(l.at(j))); return variantList; } @@ -1052,12 +1055,12 @@ static void initDefaultPaths(QMutexLocker *locker) // Non XDG platforms (OS X, iOS, Blackberry, Android...) have used this code path erroneously // for some time now. Moving away from that would require migrating existing settings. QString userPath; - char *env = getenv("XDG_CONFIG_HOME"); - if (env == 0) { + QByteArray env = qgetenv("XDG_CONFIG_HOME"); + if (env.isEmpty()) { userPath = QDir::homePath(); userPath += QLatin1Char('/'); userPath += QLatin1String(".config"); - } else if (*env == '/') { + } else if (env.startsWith('/')) { userPath = QFile::decodeName(env); } else { userPath = QDir::homePath(); @@ -1269,7 +1272,7 @@ bool QConfFileSettingsPrivate::get(const QString &key, QVariant *value) const QStringList QConfFileSettingsPrivate::children(const QString &prefix, ChildSpec spec) const { - QMap<QString, QString> result; + QStringList result; ParsedSettingsMap::const_iterator j; QSettingsKey thePrefix(prefix, caseSensitivity); @@ -1289,14 +1292,14 @@ QStringList QConfFileSettingsPrivate::children(const QString &prefix, ChildSpec &confFile->originalKeys)->lowerBound( thePrefix); while (j != confFile->originalKeys.constEnd() && j.key().startsWith(thePrefix)) { if (!confFile->removedKeys.contains(j.key())) - processChild(j.key().originalCaseKey().mid(startPos), spec, result); + processChild(j.key().originalCaseKey().midRef(startPos), spec, result); ++j; } j = const_cast<const ParsedSettingsMap *>( &confFile->addedKeys)->lowerBound(thePrefix); while (j != confFile->addedKeys.constEnd() && j.key().startsWith(thePrefix)) { - processChild(j.key().originalCaseKey().mid(startPos), spec, result); + processChild(j.key().originalCaseKey().midRef(startPos), spec, result); ++j; } @@ -1304,7 +1307,10 @@ QStringList QConfFileSettingsPrivate::children(const QString &prefix, ChildSpec break; } } - return result.keys(); + std::sort(result.begin(), result.end()); + result.erase(std::unique(result.begin(), result.end()), + result.end()); + return result; } void QConfFileSettingsPrivate::clear() |