diff options
-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" |