diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2022-03-25 12:26:07 +0100 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2022-04-26 21:59:07 +0200 |
commit | e1d50add353f3eecd883ffadf5f68d64809393e0 (patch) | |
tree | 7c55ac783afd2c3adeba53d8762e1ae717aef794 /src/corelib/io/qsettings.cpp | |
parent | 64af542374c8b70a222b342aa1d33b5ed83e246a (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.cpp | 31 |
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 §ion, 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 §ion, 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; |