Improve precision of reported file times on Unix-style platforms
Instead of reporting the file times in the precision of seconds, our API allows us to report it up to millisecond precision. Change-Id: I8bcc6a1fb4116e8c5421d650a68f6fb00482e551 Reviewed-by: Alex Trotsenko <alex1973tr@gmail.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>bb10
parent
6e21c3fafd
commit
494ced1329
|
|
@ -227,14 +227,27 @@ static void fillStat64fromStat32(struct stat64 *statBuf64, const struct stat &st
|
|||
{
|
||||
statBuf64->st_mode = statBuf32.st_mode;
|
||||
statBuf64->st_size = statBuf32.st_size;
|
||||
#if _POSIX_VERSION >= 200809L
|
||||
statBuf64->st_ctim = statBuf32.st_ctim;
|
||||
statBuf64->st_mtim = statBuf32.st_mtim;
|
||||
statBuf64->st_atim = statBuf32.st_atim;
|
||||
#else
|
||||
statBuf64->st_ctime = statBuf32.st_ctime;
|
||||
statBuf64->st_mtime = statBuf32.st_mtime;
|
||||
statBuf64->st_atime = statBuf32.st_atime;
|
||||
#endif
|
||||
statBuf64->st_uid = statBuf32.st_uid;
|
||||
statBuf64->st_gid = statBuf32.st_gid;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if _POSIX_VERSION >= 200809L
|
||||
static qint64 timespecToMSecs(const timespec &spec)
|
||||
{
|
||||
return (qint64(spec.tv_sec) * 1000) + (spec.tv_nsec / 1000000);
|
||||
}
|
||||
#endif
|
||||
|
||||
void QFileSystemMetaData::fillFromStatBuf(const QT_STATBUF &statBuffer)
|
||||
{
|
||||
// Permissions
|
||||
|
|
@ -278,9 +291,17 @@ void QFileSystemMetaData::fillFromStatBuf(const QT_STATBUF &statBuffer)
|
|||
#endif
|
||||
|
||||
// Times
|
||||
creationTime_ = statBuffer.st_ctime ? statBuffer.st_ctime : statBuffer.st_mtime;
|
||||
modificationTime_ = statBuffer.st_mtime;
|
||||
accessTime_ = statBuffer.st_atime;
|
||||
#if _POSIX_VERSION >= 200809L
|
||||
modificationTime_ = timespecToMSecs(statBuffer.st_mtim);
|
||||
creationTime_ = timespecToMSecs(statBuffer.st_ctim);
|
||||
if (!creationTime_)
|
||||
creationTime_ = modificationTime_;
|
||||
accessTime_ = timespecToMSecs(statBuffer.st_atim);
|
||||
#else
|
||||
creationTime_ = qint64(statBuffer.st_ctime ? statBuffer.st_ctime : statBuffer.st_mtime) * 1000;
|
||||
modificationTime_ = qint64(statBuffer.st_mtime) * 1000;
|
||||
accessTime_ = qint64(statBuffer.st_atime) * 1000;
|
||||
#endif
|
||||
userId_ = statBuffer.st_uid;
|
||||
groupId_ = statBuffer.st_gid;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -237,9 +237,10 @@ private:
|
|||
FILETIME lastAccessTime_;
|
||||
FILETIME lastWriteTime_;
|
||||
#else
|
||||
time_t creationTime_;
|
||||
time_t modificationTime_;
|
||||
time_t accessTime_;
|
||||
// msec precision
|
||||
qint64 creationTime_;
|
||||
qint64 modificationTime_;
|
||||
qint64 accessTime_;
|
||||
|
||||
uint userId_;
|
||||
uint groupId_;
|
||||
|
|
@ -276,9 +277,9 @@ inline QDateTime QFileSystemMetaData::fileTime(QAbstractFileEngine::FileTime tim
|
|||
#endif
|
||||
|
||||
#if defined(Q_OS_UNIX)
|
||||
inline QDateTime QFileSystemMetaData::creationTime() const { return QDateTime::fromSecsSinceEpoch(creationTime_); }
|
||||
inline QDateTime QFileSystemMetaData::modificationTime() const { return QDateTime::fromSecsSinceEpoch(modificationTime_); }
|
||||
inline QDateTime QFileSystemMetaData::accessTime() const { return QDateTime::fromSecsSinceEpoch(accessTime_); }
|
||||
inline QDateTime QFileSystemMetaData::creationTime() const { return QDateTime::fromMSecsSinceEpoch(creationTime_); }
|
||||
inline QDateTime QFileSystemMetaData::modificationTime() const { return QDateTime::fromMSecsSinceEpoch(modificationTime_); }
|
||||
inline QDateTime QFileSystemMetaData::accessTime() const { return QDateTime::fromMSecsSinceEpoch(accessTime_); }
|
||||
|
||||
inline uint QFileSystemMetaData::userId() const { return userId_; }
|
||||
inline uint QFileSystemMetaData::groupId() const { return groupId_; }
|
||||
|
|
|
|||
Loading…
Reference in New Issue