summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qsettings.cpp
diff options
context:
space:
mode:
authorEdward Welbourne <edward.welbourne@qt.io>2022-03-25 12:26:07 +0100
committerEdward Welbourne <edward.welbourne@qt.io>2022-04-26 21:59:07 +0200
commite1d50add353f3eecd883ffadf5f68d64809393e0 (patch)
tree7c55ac783afd2c3adeba53d8762e1ae717aef794 /src/corelib/io/qsettings.cpp
parent64af542374c8b70a222b342aa1d33b5ed83e246a (diff)
Simplify QConfFileSettingsPrivate::readIniSection() using QBAV
It needs fewer moving parts this way. In the process, to match the QString strValue, rename a QString key to strKey, freeing the name key for a view. Change-Id: Ic58145fd665db265d136545ced59e293a2eed1eb Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Diffstat (limited to 'src/corelib/io/qsettings.cpp')
-rw-r--r--src/corelib/io/qsettings.cpp31
1 files changed, 15 insertions, 16 deletions
diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp
index 57b01ec66d..af47b5f982 100644
--- a/src/corelib/io/qsettings.cpp
+++ b/src/corelib/io/qsettings.cpp
@@ -1686,29 +1686,28 @@ bool QConfFileSettingsPrivate::readIniSection(const QSettingsKey &section, QByte
qsizetype position = section.originalKeyPosition();
while (readIniLine(data, dataPos, lineStart, lineLen, equalsPos)) {
- char ch = data.at(lineStart);
- Q_ASSERT(ch != '[');
+ QByteArrayView line = data.sliced(lineStart, lineLen);
+ Q_ASSERT(!line.startsWith('['));
if (equalsPos == -1) {
- if (ch != ';')
+ if (!line.startsWith(';'))
ok = false;
continue;
}
+ // Shift equalPos indexing to be within line, rather than data:
+ equalsPos -= lineStart;
+ // Assured by readIniLine:
+ Q_ASSERT(equalsPos >= 0 && equalsPos < lineLen);
- qsizetype keyEnd = equalsPos;
- while (keyEnd > lineStart && ((ch = data.at(keyEnd - 1)) == ' ' || ch == '\t'))
- --keyEnd;
- qsizetype valueStart = equalsPos + 1;
+ QByteArrayView key = line.first(equalsPos).trimmed();
+ QByteArrayView value = line.sliced(equalsPos + 1);
- QString key = section.originalCaseKey();
- bool keyIsLowercase
- = iniUnescapedKey(data.first(keyEnd).sliced(lineStart), key) && sectionIsLowercase;
+ QString strKey = section.originalCaseKey();
+ bool keyIsLowercase = iniUnescapedKey(key, strKey) && sectionIsLowercase;
QString strValue;
- strValue.reserve(lineLen - (valueStart - lineStart));
- bool isStringList
- = iniUnescapedStringList(data.first(lineStart + lineLen).sliced(valueStart),
- strValue, strListValue);
+ strValue.reserve(value.size());
+ bool isStringList = iniUnescapedStringList(value, strValue, strListValue);
QVariant variant;
if (isStringList) {
variant = stringListToVariantList(strListValue);
@@ -1721,8 +1720,8 @@ bool QConfFileSettingsPrivate::readIniSection(const QSettingsKey &section, QByte
QSettingsKey by passing Qt::CaseSensitive when the
key is already in lowercase.
*/
- settingsMap->insert(QSettingsKey(key, keyIsLowercase ? Qt::CaseSensitive
- : IniCaseSensitivity,
+ settingsMap->insert(QSettingsKey(strKey, keyIsLowercase ? Qt::CaseSensitive
+ : IniCaseSensitivity,
position),
variant);
++position;