Fixed: QFileInfo::lastModified() returning wrong value.
authorMarkku Heikkila <markku.heikkila@digia.com>
Tue, 5 Jun 2012 12:50:13 +0000 (15:50 +0300)
committerQt by Nokia <qt-info@nokia.com>
Thu, 13 Sep 2012 17:33:08 +0000 (19:33 +0200)
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>
src/corelib/io/qfileinfo.cpp
src/corelib/io/qfilesystemengine_unix.cpp
src/corelib/io/qfilesystemengine_win.cpp
tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp

index 3a67b70..b58c3d3 100644 (file)
@@ -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);
index 3d75b8c..4c295b1 100644 (file)
@@ -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);
 }
 
index 6041edb..ae8638e 100644 (file)
@@ -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);
     }
index df8b1dd..59a28e1 100644 (file)
@@ -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"