diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2017-02-23 14:53:27 +0100 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2018-03-14 15:33:28 +0000 |
commit | 6bee0b695d5a3b1ebc2ce14baba7651ae37a2f1e (patch) | |
tree | 56b127056df94bba2d49fa9a877005731ec2564e /src | |
parent | 1ccf674e9743823bdd071b34723f142b47642ce8 (diff) |
qmake: improve time stamp precision of the touch() function
sync-up with qmake; no effect on creator.
Change-Id: I6928660230d84f8511bf0f58e268906d2e575e04
(cherry picked from qtbase/d83a20af1d05b5958d3559482b715777a57dea7a)
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/shared/proparser/qmakebuiltins.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/shared/proparser/qmakebuiltins.cpp b/src/shared/proparser/qmakebuiltins.cpp index 7d32611f56..c935a364fe 100644 --- a/src/shared/proparser/qmakebuiltins.cpp +++ b/src/shared/proparser/qmakebuiltins.cpp @@ -54,6 +54,7 @@ #include <time.h> #include <utime.h> #include <errno.h> +#include <fcntl.h> #include <unistd.h> #include <signal.h> #include <sys/wait.h> @@ -1828,10 +1829,16 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional( evalError(fL1S("Cannot stat() reference file %1: %2.").arg(rfn, fL1S(strerror(errno)))); return ReturnFalse; } +#if defined(_POSIX_VERSION) && _POSIX_VERSION >= 200809L + const struct timespec times[2] = { { 0, UTIME_NOW }, st.st_mtim }; + const bool utimeError = utimensat(AT_FDCWD, tfn.toLocal8Bit().constData(), times, 0) < 0; +#else struct utimbuf utb; utb.actime = time(0); utb.modtime = st.st_mtime; - if (utime(tfn.toLocal8Bit().constData(), &utb)) { + const bool utimeError = utime(tfn.toLocal8Bit().constData(), &utb) < 0; +#endif + if (utimeError) { evalError(fL1S("Cannot touch %1: %2.").arg(tfn, fL1S(strerror(errno)))); return ReturnFalse; } |