summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkku Heikkila <markku.heikkila@digia.com>2012-06-05 15:50:13 +0300
committerQt by Nokia <qt-info@nokia.com>2012-09-13 19:33:08 +0200
commitd1d4647b74e628eb991c09841d9a6dda7ac51f9c (patch)
treea2c97e5cfd2267a3fb277b4ea685cd54b72fff47
parenta42f1f9a5080c1087653c925ae7e453f09c84e57 (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.cpp9
-rw-r--r--src/corelib/io/qfilesystemengine_unix.cpp5
-rw-r--r--src/corelib/io/qfilesystemengine_win.cpp5
-rw-r--r--tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp10
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"