|
|
@@ -1366,15 +1366,18 @@ bool SystemTools::Touch(const std::string& filename, bool create)
|
|
|
struct timeval mtime;
|
|
|
gettimeofday(&mtime, 0);
|
|
|
# if KWSYS_CXX_HAS_UTIMES
|
|
|
- struct timeval times[2] =
|
|
|
- {
|
|
|
-# if KWSYS_STAT_HAS_ST_MTIM
|
|
|
- {st.st_atim.tv_sec, st.st_atim.tv_nsec/1000}, /* tv_sec, tv_usec */
|
|
|
+ struct timeval atime;
|
|
|
+# if KWSYS_CXX_STAT_HAS_ST_MTIM
|
|
|
+ atime.tv_sec = st.st_atim.tv_sec;
|
|
|
+ atime.tv_usec = st.st_atim.tv_nsec/1000;
|
|
|
+# elif KWSYS_CXX_STAT_HAS_ST_MTIMESPEC
|
|
|
+ atime.tv_sec = st.st_atimespec.tv_sec;
|
|
|
+ atime.tv_usec = st.st_atimespec.tv_nsec/1000;
|
|
|
# else
|
|
|
- {st.st_atime, 0},
|
|
|
+ atime.tv_sec = st.st_atime;
|
|
|
+ atime.tv_usec = 0;
|
|
|
# endif
|
|
|
- mtime
|
|
|
- };
|
|
|
+ struct timeval times[2] = { atime, mtime };
|
|
|
if(utimes(filename.c_str(), times) < 0)
|
|
|
{
|
|
|
return false;
|
|
|
@@ -1408,7 +1411,7 @@ bool SystemTools::FileTimeCompare(const std::string& f1,
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
-# if KWSYS_STAT_HAS_ST_MTIM
|
|
|
+# if KWSYS_CXX_STAT_HAS_ST_MTIM
|
|
|
// Compare using nanosecond resolution.
|
|
|
if(s1.st_mtim.tv_sec < s2.st_mtim.tv_sec)
|
|
|
{
|
|
|
@@ -1426,6 +1429,24 @@ bool SystemTools::FileTimeCompare(const std::string& f1,
|
|
|
{
|
|
|
*result = 1;
|
|
|
}
|
|
|
+# elif KWSYS_CXX_STAT_HAS_ST_MTIMESPEC
|
|
|
+ // Compare using nanosecond resolution.
|
|
|
+ if(s1.st_mtimespec.tv_sec < s2.st_mtimespec.tv_sec)
|
|
|
+ {
|
|
|
+ *result = -1;
|
|
|
+ }
|
|
|
+ else if(s1.st_mtimespec.tv_sec > s2.st_mtimespec.tv_sec)
|
|
|
+ {
|
|
|
+ *result = 1;
|
|
|
+ }
|
|
|
+ else if(s1.st_mtimespec.tv_nsec < s2.st_mtimespec.tv_nsec)
|
|
|
+ {
|
|
|
+ *result = -1;
|
|
|
+ }
|
|
|
+ else if(s1.st_mtimespec.tv_nsec > s2.st_mtimespec.tv_nsec)
|
|
|
+ {
|
|
|
+ *result = 1;
|
|
|
+ }
|
|
|
# else
|
|
|
// Compare using 1 second resolution.
|
|
|
if(s1.st_mtime < s2.st_mtime)
|