summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/io/qsettings.cpp92
-rw-r--r--src/corelib/io/qsettings_mac.cpp25
-rw-r--r--src/corelib/io/qsettings_p.h4
-rw-r--r--src/tools/bootstrap/bootstrap.pro3
4 files changed, 51 insertions, 73 deletions
diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp
index 8000dc5272..fcdc1e362b 100644
--- a/src/corelib/io/qsettings.cpp
+++ b/src/corelib/io/qsettings.cpp
@@ -1355,7 +1355,6 @@ void QConfFileSettingsPrivate::syncConfFile(int confFileNo)
{
QConfFile *confFile = confFiles[confFileNo].data();
bool readOnly = confFile->addedKeys.isEmpty() && confFile->removedKeys.isEmpty();
- bool ok;
/*
We can often optimize the read-only case, if the file on disk
@@ -1415,31 +1414,26 @@ void QConfFileSettingsPrivate::syncConfFile(int confFileNo)
because they don't exist) are treated as empty files.
*/
if (file.isReadable() && fileInfo.size() != 0) {
+ bool ok = false;
#ifdef Q_OS_MAC
if (format == QSettings::NativeFormat) {
- ok = readPlistFile(confFile->name, &confFile->originalKeys);
+ QByteArray data = file.readAll();
+ ok = readPlistFile(data, &confFile->originalKeys);
} else
#endif
- {
- if (format <= QSettings::IniFormat) {
- QByteArray data = file.readAll();
- ok = readIniFile(data, &confFile->unparsedIniSections);
- } else {
- if (readFunc) {
- QSettings::SettingsMap tempNewKeys;
- ok = readFunc(file, tempNewKeys);
-
- if (ok) {
- QSettings::SettingsMap::const_iterator i = tempNewKeys.constBegin();
- while (i != tempNewKeys.constEnd()) {
- confFile->originalKeys.insert(QSettingsKey(i.key(),
- caseSensitivity),
- i.value());
- ++i;
- }
- }
- } else {
- ok = false;
+ if (format <= QSettings::IniFormat) {
+ QByteArray data = file.readAll();
+ ok = readIniFile(data, &confFile->unparsedIniSections);
+ } else if (readFunc) {
+ QSettings::SettingsMap tempNewKeys;
+ ok = readFunc(file, tempNewKeys);
+
+ if (ok) {
+ QSettings::SettingsMap::const_iterator i = tempNewKeys.constBegin();
+ while (i != tempNewKeys.constEnd()) {
+ confFile->originalKeys.insert(QSettingsKey(i.key(), caseSensitivity),
+ i.value());
+ ++i;
}
}
}
@@ -1457,44 +1451,42 @@ void QConfFileSettingsPrivate::syncConfFile(int confFileNo)
so everything is under control.
*/
if (!readOnly) {
+ bool ok = false;
ensureAllSectionsParsed(confFile);
ParsedSettingsMap mergedKeys = confFile->mergedKeyMap();
-#ifdef Q_OS_MAC
- if (format == QSettings::NativeFormat) {
- ok = writePlistFile(confFile->name, mergedKeys);
- } else
-#endif
- {
#ifndef QT_BOOTSTRAPPED
- QSaveFile sf(confFile->name);
+ QSaveFile sf(confFile->name);
#else
- QFile sf(confFile->name);
+ QFile sf(confFile->name);
#endif
- if (!sf.open(QIODevice::WriteOnly)) {
- setStatus(QSettings::AccessError);
- ok = false;
- } else if (format <= QSettings::IniFormat) {
- ok = writeIniFile(sf, mergedKeys);
- } else {
- if (writeFunc) {
- QSettings::SettingsMap tempOriginalKeys;
+ if (!sf.open(QIODevice::WriteOnly)) {
+ setStatus(QSettings::AccessError);
+ return;
+ }
- ParsedSettingsMap::const_iterator i = mergedKeys.constBegin();
- while (i != mergedKeys.constEnd()) {
- tempOriginalKeys.insert(i.key(), i.value());
- ++i;
- }
- ok = writeFunc(sf, tempOriginalKeys);
- } else {
- ok = false;
- }
+#ifdef Q_OS_MAC
+ if (format == QSettings::NativeFormat) {
+ ok = writePlistFile(sf, mergedKeys);
+ } else
+#endif
+ if (format <= QSettings::IniFormat) {
+ ok = writeIniFile(sf, mergedKeys);
+ } else if (writeFunc) {
+ QSettings::SettingsMap tempOriginalKeys;
+
+ ParsedSettingsMap::const_iterator i = mergedKeys.constBegin();
+ while (i != mergedKeys.constEnd()) {
+ tempOriginalKeys.insert(i.key(), i.value());
+ ++i;
}
+ ok = writeFunc(sf, tempOriginalKeys);
+ }
+
#ifndef QT_BOOTSTRAPPED
- if (ok)
- ok = sf.commit();
+ if (ok)
+ ok = sf.commit();
#endif
- }
if (ok) {
confFile->unparsedIniSections.clear();
diff --git a/src/corelib/io/qsettings_mac.cpp b/src/corelib/io/qsettings_mac.cpp
index 7f857a77a4..bc397055ff 100644
--- a/src/corelib/io/qsettings_mac.cpp
+++ b/src/corelib/io/qsettings_mac.cpp
@@ -613,24 +613,11 @@ QSettingsPrivate *QSettingsPrivate::create(QSettings::Format format,
}
}
-static QCFType<CFURLRef> urlFromFileName(const QString &fileName)
+bool QConfFileSettingsPrivate::readPlistFile(const QByteArray &data, ParsedSettingsMap *map) const
{
- return CFURLCreateWithFileSystemPath(kCFAllocatorDefault, QCFString(fileName),
- kCFURLPOSIXPathStyle, false);
-}
-
-bool QConfFileSettingsPrivate::readPlistFile(const QString &fileName, ParsedSettingsMap *map) const
-{
- QCFType<CFDataRef> resource;
- SInt32 code;
- if (!CFURLCreateDataAndPropertiesFromResource(kCFAllocatorDefault, urlFromFileName(fileName),
- &resource, 0, 0, &code))
- return false;
-
- QCFString errorStr;
+ QCFType<CFDataRef> cfData = data.toRawCFData();
QCFType<CFPropertyListRef> propertyList =
- CFPropertyListCreateFromXMLData(kCFAllocatorDefault, resource, kCFPropertyListImmutable,
- &errorStr);
+ CFPropertyListCreateWithData(kCFAllocatorDefault, cfData, kCFPropertyListImmutable, Q_NULLPTR, Q_NULLPTR);
if (!propertyList)
return true;
@@ -651,8 +638,7 @@ bool QConfFileSettingsPrivate::readPlistFile(const QString &fileName, ParsedSett
return true;
}
-bool QConfFileSettingsPrivate::writePlistFile(const QString &fileName,
- const ParsedSettingsMap &map) const
+bool QConfFileSettingsPrivate::writePlistFile(QIODevice &file, const ParsedSettingsMap &map) const
{
QVarLengthArray<QCFType<CFStringRef> > cfkeys(map.size());
QVarLengthArray<QCFType<CFPropertyListRef> > cfvalues(map.size());
@@ -675,8 +661,7 @@ bool QConfFileSettingsPrivate::writePlistFile(const QString &fileName,
QCFType<CFDataRef> xmlData = CFPropertyListCreateData(
kCFAllocatorDefault, propertyList, kCFPropertyListXMLFormat_v1_0, 0, 0);
- SInt32 code;
- return CFURLWriteDataAndPropertiesToResource(urlFromFileName(fileName), xmlData, 0, &code);
+ return file.write(QByteArray::fromRawCFData(xmlData)) == CFDataGetLength(xmlData);
}
QT_END_NAMESPACE
diff --git a/src/corelib/io/qsettings_p.h b/src/corelib/io/qsettings_p.h
index 9d7b667514..e6d3413bab 100644
--- a/src/corelib/io/qsettings_p.h
+++ b/src/corelib/io/qsettings_p.h
@@ -296,8 +296,8 @@ private:
void syncConfFile(int confFileNo);
bool writeIniFile(QIODevice &device, const ParsedSettingsMap &map);
#ifdef Q_OS_MAC
- bool readPlistFile(const QString &fileName, ParsedSettingsMap *map) const;
- bool writePlistFile(const QString &fileName, const ParsedSettingsMap &map) const;
+ bool readPlistFile(const QByteArray &data, ParsedSettingsMap *map) const;
+ bool writePlistFile(QIODevice &file, const ParsedSettingsMap &map) const;
#endif
void ensureAllSectionsParsed(QConfFile *confFile) const;
void ensureSectionParsed(QConfFile *confFile, const QSettingsKey &key) const;
diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro
index d544288031..8a1e1fd6e3 100644
--- a/src/tools/bootstrap/bootstrap.pro
+++ b/src/tools/bootstrap/bootstrap.pro
@@ -119,7 +119,8 @@ mac {
../../corelib/kernel/qcoreapplication_mac.cpp \
../../corelib/kernel/qcore_mac.cpp
OBJECTIVE_SOURCES += \
- ../../corelib/kernel/qcore_mac_objc.mm
+ ../../corelib/kernel/qcore_mac_objc.mm \
+ ../../corelib/kernel/qcore_foundation.mm
LIBS += -framework Foundation
osx: LIBS_PRIVATE += -framework CoreServices