read settings file before truncating it in QSettingsPrivate::write()

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-01-17 06:40:23 +02:00
parent 755597abe0
commit ebc8f7525c

View file

@ -286,13 +286,6 @@ void QSettingsPrivate::write()
}
QMutexLocker locker(qSettingsMutex());
QFile writefile(filename);
if (Q_UNLIKELY(!writefile.open(QFile::WriteOnly))) {
status = QSettings::AccessError;
qWarning("QSettingsPrivate::write: failed to open %s", filename.toLocal8Bit().constData());
return;
}
QSettings::SettingsMap mergemap;
QFile readfile(filename);
if (readfile.open(QFile::ReadOnly)) {
@ -302,6 +295,13 @@ void QSettingsPrivate::write()
mergemap.insert(key, map.value(key));
}
QFile writefile(filename);
if (Q_UNLIKELY(!writefile.open(QFile::WriteOnly))) {
status = QSettings::AccessError;
qWarning("QSettingsPrivate::write: failed to open %s", filename.toLocal8Bit().constData());
return;
}
if (Q_UNLIKELY(!writeFunc(writefile, mergemap))) {
status = QSettings::FormatError;
qWarning("QSettingsPrivate::write: could not write %s", filename.toLocal8Bit().constData());