diff options
author | mae <qt-info@nokia.com> | 2011-04-29 09:44:43 (GMT) |
---|---|---|
committer | mae <qt-info@nokia.com> | 2011-04-29 09:44:43 (GMT) |
commit | 31ef8fa6abc2ea23c6f0a996b36494d88aafb0b5 (patch) | |
tree | 15e8c0132ac06a9614d69e909c233ef811f17aa2 /src/corelib/io/qsettings.cpp | |
parent | c85c1ea36cd9ebe6a9ff970d7ba0ce8d08d5b27b (diff) | |
download | Qt-31ef8fa6abc2ea23c6f0a996b36494d88aafb0b5.zip Qt-31ef8fa6abc2ea23c6f0a996b36494d88aafb0b5.tar.gz Qt-31ef8fa6abc2ea23c6f0a996b36494d88aafb0b5.tar.bz2 |
Reduce open and stat system calls for QSettings
The patch moves the global static QSettings object
from QLibrary to QCoreApplication and reduces a
few stat and open calls.
Without the patch, a large Trolltech.conf was
pushed out of the unused settings cache during
startup, meaning Trolltech.conf was parsed
more than once.
Reviewed-by: Liang Qi
Diffstat (limited to 'src/corelib/io/qsettings.cpp')
-rw-r--r-- | src/corelib/io/qsettings.cpp | 29 |
1 files changed, 5 insertions, 24 deletions
diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index b084ca5..f43fb31 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -981,23 +981,6 @@ QStringList QSettingsPrivate::splitArgs(const QString &s, int idx) // ************************************************************************ // QConfFileSettingsPrivate -/* - If we don't have the permission to read the file, returns false. - If the file doesn't exist, returns true. -*/ -static bool checkAccess(const QString &name) -{ - QFileInfo fileInfo(name); - - if (fileInfo.exists()) { - QFile file(name); - // if the file exists but we can't open it, report an error - return file.open(QFile::ReadOnly); - } else { - return true; - } -} - void QConfFileSettingsPrivate::initFormat() { extension = (format == QSettings::NativeFormat) ? QLatin1String(".conf") : QLatin1String(".ini"); @@ -1026,18 +1009,13 @@ void QConfFileSettingsPrivate::initFormat() void QConfFileSettingsPrivate::initAccess() { - bool readAccess = false; if (confFiles[spec]) { - readAccess = checkAccess(confFiles[spec]->name); if (format > QSettings::IniFormat) { if (!readFunc) - readAccess = false; + setStatus(QSettings::AccessError); } } - if (!readAccess) - setStatus(QSettings::AccessError); - sync(); // loads the files the first time } @@ -1432,7 +1410,7 @@ void QConfFileSettingsPrivate::syncConfFile(int confFileNo) We can often optimize the read-only case, if the file on disk hasn't changed. */ - if (readOnly) { + if (readOnly && confFile->size > 0) { QFileInfo fileInfo(confFile->name); if (confFile->size == fileInfo.size() && confFile->timeStamp == fileInfo.lastModified()) return; @@ -1455,6 +1433,9 @@ void QConfFileSettingsPrivate::syncConfFile(int confFileNo) if (!file.isOpen()) file.open(QFile::ReadOnly); + if (!createFile && !file.isOpen()) + setStatus(QSettings::AccessError); + #ifdef Q_OS_WIN HANDLE readSemaphore = 0; HANDLE writeSemaphore = 0; |