diff options
author | Markku Heikkila <markku.heikkila@digia.com> | 2012-06-05 15:50:13 +0300 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-09-13 19:33:08 +0200 |
commit | d1d4647b74e628eb991c09841d9a6dda7ac51f9c (patch) | |
tree | a2c97e5cfd2267a3fb277b4ea685cd54b72fff47 | |
parent | a42f1f9a5080c1087653c925ae7e453f09c84e57 (diff) |
Fixed: QFileInfo::lastModified() returning wrong value.
Fixed so that empty QDateTime is returned for non existing file.
Fixed also created() and lastRead() to return empty QDateTime for
non existing file.
QFileSystemEngine::fillMetaData() returned true for non existing
files. This was also corrected.
Task-number: QTBUG-25811
Change-Id: I523eb99e4405b4b813b2950f85cc646239181d07
Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org>
Reviewed-by: Christian Stromme <christian.stromme@nokia.com>
-rw-r--r-- | src/corelib/io/qfileinfo.cpp | 9 | ||||
-rw-r--r-- | src/corelib/io/qfilesystemengine_unix.cpp | 5 | ||||
-rw-r--r-- | src/corelib/io/qfilesystemengine_win.cpp | 5 | ||||
-rw-r--r-- | tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp | 10 |
4 files changed, 24 insertions, 5 deletions
diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp index 3a67b7061f..b58c3d3032 100644 --- a/src/corelib/io/qfileinfo.cpp +++ b/src/corelib/io/qfileinfo.cpp @@ -1259,7 +1259,8 @@ QDateTime QFileInfo::created() const return QDateTime(); if (d->fileEngine == 0) { if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::CreationTime)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::CreationTime); + if (!QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::CreationTime)) + return QDateTime(); return d->metaData.creationTime(); } return d->getFileTime(QAbstractFileEngine::CreationTime); @@ -1277,7 +1278,8 @@ QDateTime QFileInfo::lastModified() const return QDateTime(); if (d->fileEngine == 0) { if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::ModificationTime)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::ModificationTime); + if (!QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::ModificationTime)) + return QDateTime(); return d->metaData.modificationTime(); } return d->getFileTime(QAbstractFileEngine::ModificationTime); @@ -1298,7 +1300,8 @@ QDateTime QFileInfo::lastRead() const return QDateTime(); if (d->fileEngine == 0) { if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::AccessTime)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::AccessTime); + if (!QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::AccessTime)) + return QDateTime(); return d->metaData.accessTime(); } return d->getFileTime(QAbstractFileEngine::AccessTime); diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp index 3d75b8cb09..4c295b157c 100644 --- a/src/corelib/io/qfilesystemengine_unix.cpp +++ b/src/corelib/io/qfilesystemengine_unix.cpp @@ -467,7 +467,10 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM data.knownFlagsMask |= QFileSystemMetaData::BundleType; } #endif - + if (!entryExists) { + data.clearFlags(what); + return false; + } return data.hasFlags(what); } diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index 6041edb252..ae8638ed5e 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -856,7 +856,10 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM data.fillFromFindData(findData, false, fname.isDriveRoot()); } else { if (!tryFindFallback(fname, data)) - tryDriveUNCFallback(fname, data); + if (!tryDriveUNCFallback(fname, data)) { + SetErrorMode(oldmode); + return false; + } } SetErrorMode(oldmode); } diff --git a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp index df8b1dda1c..59a28e1df5 100644 --- a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp +++ b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp @@ -189,6 +189,7 @@ private slots: void group(); void invalidState(); + void nonExistingFileDates(); }; void tst_QFileInfo::cleanupTestCase() @@ -1819,5 +1820,14 @@ void tst_QFileInfo::invalidState() QVERIFY(true); } +void tst_QFileInfo::nonExistingFileDates() +{ + QFileInfo info("non-existing-file.foobar"); + QVERIFY(!info.exists()); + QVERIFY(!info.created().isValid()); + QVERIFY(!info.lastRead().isValid()); + QVERIFY(!info.lastModified().isValid()); +} + QTEST_MAIN(tst_QFileInfo) #include "tst_qfileinfo.moc" |