diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2017-07-02 10:28:39 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2017-08-05 16:41:35 +0000 |
commit | db433bdf65e011e64be51948e79abc02034dddbf (patch) | |
tree | d9dcde68aa454fa4283cf2dd55aa9c3d421e266c /src/corelib/io/qfilesystemengine_win.cpp | |
parent | 261c6713bd0b39778236f7dbb1d81d48599f955c (diff) |
Move platform-specific code from QFSFileEngine to QFileSystemEngine
Change-Id: I8d96dea9955d4c749b99fffd14cd9395174ba005
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/io/qfilesystemengine_win.cpp')
-rw-r--r-- | src/corelib/io/qfilesystemengine_win.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index 74c6b52a66..5796b1ba66 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -231,6 +231,28 @@ QT_BEGIN_NAMESPACE Q_CORE_EXPORT int qt_ntfs_permission_lookup = 0; +static inline bool toFileTime(const QDateTime &date, FILETIME *fileTime) +{ + SYSTEMTIME lTime; + const QDate d = date.date(); + const QTime t = date.time(); + + lTime.wYear = d.year(); + lTime.wMonth = d.month(); + lTime.wDay = d.day(); + lTime.wHour = t.hour(); + lTime.wMinute = t.minute(); + lTime.wSecond = t.second(); + lTime.wMilliseconds = t.msec(); + lTime.wDayOfWeek = d.dayOfWeek() % 7; + + SYSTEMTIME sTime; + if (!::TzSpecificLocalTimeToSystemTime(0, &lTime, &sTime)) + return false; + + return ::SystemTimeToFileTime(&sTime, fileTime); +} + static QString readSymLink(const QFileSystemEntry &link) { QString result; @@ -571,6 +593,42 @@ QByteArray QFileSystemEngine::id(HANDLE fHandle) } //static +bool QFileSystemEngine::setFileTime(HANDLE fHandle, const QDateTime &newDate, + QAbstractFileEngine::FileTime time, QSystemError &error) +{ + FILETIME fTime; + FILETIME *pLastWrite = NULL; + FILETIME *pLastAccess = NULL; + FILETIME *pCreationTime = NULL; + + switch (time) { + case QAbstractFileEngine::ModificationTime: + pLastWrite = &fTime; + break; + + case QAbstractFileEngine::AccessTime: + pLastAccess = &fTime; + break; + + case QAbstractFileEngine::CreationTime: + pCreationTime = &fTime; + break; + + default: + error = QSystemError(ERROR_INVALID_PARAMETER, QSystemError::NativeError); + return false; + } + + if (!toFileTime(newDate, &fTime)) + return false; + + if (!::SetFileTime(fHandle, pCreationTime, pLastAccess, pLastWrite)) { + error = QSystemError(::GetLastError(), QSystemError::NativeError); + return false; + } + return true; +} + QString QFileSystemEngine::owner(const QFileSystemEntry &entry, QAbstractFileEngine::FileOwner own) { QString name; |