From 48e35e06ca19d9df6f345404e6120d0dcf69101a Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sat, 1 Jul 2017 22:23:34 -0700 Subject: [PATCH] QFSFileEngine: handle refreshing of file times better Clear the known times when we write to it and always refresh for the Access time. Change-Id: I8d96dea9955d4c749b99fffd14cd6c03b4253197 Reviewed-by: Simon Hausmann --- src/corelib/io/qfsfileengine.cpp | 20 ++++++++++++++++++++ src/corelib/io/qfsfileengine_unix.cpp | 10 ---------- src/corelib/io/qfsfileengine_win.cpp | 10 ---------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp index 75478f0467..b7f2f0d645 100644 --- a/src/corelib/io/qfsfileengine.cpp +++ b/src/corelib/io/qfsfileengine.cpp @@ -524,6 +524,25 @@ bool QFSFileEngine::seek(qint64 pos) return d->nativeSeek(pos); } +/*! + \reimp +*/ +QDateTime QFSFileEngine::fileTime(FileTime time) const +{ + Q_D(const QFSFileEngine); + + if (time == AccessTime) { + // always refresh for the access time + d->metaData.clearFlags(QFileSystemMetaData::AccessTime); + } + + if (d->doStat(QFileSystemMetaData::Times)) + return d->metaData.fileTime(time); + + return QDateTime(); +} + + /*! \internal */ @@ -708,6 +727,7 @@ qint64 QFSFileEnginePrivate::readLineFdFh(char *data, qint64 maxlen) qint64 QFSFileEngine::write(const char *data, qint64 len) { Q_D(QFSFileEngine); + d->metaData.clearFlags(QFileSystemMetaData::Times); // On Windows' stdlib implementation, the results of calling fread and // fwrite are undefined if not called either in sequence, or if preceded diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp index 9f081e9295..62e613ed14 100644 --- a/src/corelib/io/qfsfileengine_unix.cpp +++ b/src/corelib/io/qfsfileengine_unix.cpp @@ -699,16 +699,6 @@ bool QFSFileEngine::setFileTime(const QDateTime &newDate, FileTime time) #endif } -QDateTime QFSFileEngine::fileTime(FileTime time) const -{ - Q_D(const QFSFileEngine); - - if (d->doStat(QFileSystemMetaData::Times)) - return d->metaData.fileTime(time); - - return QDateTime(); -} - uchar *QFSFileEnginePrivate::map(qint64 offset, qint64 size, QFile::MemoryMapFlags flags) { #if (defined(Q_OS_LINUX) || defined(Q_OS_ANDROID)) && Q_PROCESSOR_WORDSIZE == 4 diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp index 5c6098c3b0..d749e32447 100644 --- a/src/corelib/io/qfsfileengine_win.cpp +++ b/src/corelib/io/qfsfileengine_win.cpp @@ -947,16 +947,6 @@ bool QFSFileEngine::setFileTime(const QDateTime &newDate, FileTime time) return true; } -QDateTime QFSFileEngine::fileTime(FileTime time) const -{ - Q_D(const QFSFileEngine); - - if (d->doStat(QFileSystemMetaData::Times)) - return d->metaData.fileTime(time); - - return QDateTime(); -} - uchar *QFSFileEnginePrivate::map(qint64 offset, qint64 size, QFile::MemoryMapFlags flags) {