summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElliott Sales de Andrade <quantum.analyst@gmail.com>2017-07-01 03:55:09 (GMT)
committerElliott Sales de Andrade <quantum.analyst@gmail.com>2017-09-16 07:54:11 (GMT)
commitd2bf82fef0535bc351a69392c0e0c5edc3aaf69f (patch)
tree68aac55a714dcdccca96ccc0f36f58ebe86da939
parentbf4fb03e4b266e7f75f88664b6a941d20650046b (diff)
downloadNinja-d2bf82fef0535bc351a69392c0e0c5edc3aaf69f.zip
Ninja-d2bf82fef0535bc351a69392c0e0c5edc3aaf69f.tar.gz
Ninja-d2bf82fef0535bc351a69392c0e0c5edc3aaf69f.tar.bz2
Update checks for new stat fields.
This uses the macros as defined by the man page, which, as noted in the comments, are defined correctly on as many libc's that I could check.
-rw-r--r--src/disk_interface.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/disk_interface.cc b/src/disk_interface.cc
index ffa58db..f83151c 100644
--- a/src/disk_interface.cc
+++ b/src/disk_interface.cc
@@ -194,12 +194,14 @@ TimeStamp RealDiskInterface::Stat(const string& path, string* err) const {
#if defined(__APPLE__) && !defined(_POSIX_C_SOURCE)
return ((int64_t)st.st_mtimespec.tv_sec * 1000000000LL +
st.st_mtimespec.tv_nsec);
-#elif defined(_LARGEFILE64_SOURCE)
+#elif (_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700 || defined(_BSD_SOURCE) || defined(_SVID_SOURCE) || \
+ defined(__BIONIC__))
+ // For glibc, see "Timestamp files" in the Notes of http://www.kernel.org/doc/man-pages/online/pages/man2/stat.2.html
+ // newlib, uClibc and musl follow the kernel (or Cygwin) headers and define the right macro values above.
+ // For bsd, see https://github.com/freebsd/freebsd/blob/master/sys/sys/stat.h and similar
+ // For bionic, C and POSIX API is always enabled.
return (int64_t)st.st_mtim.tv_sec * 1000000000LL + st.st_mtim.tv_nsec;
-#elif defined(__CYGWIN__)
- return (int64_t)st.st_mtime * 1000000000LL;
#else
- // see http://www.kernel.org/doc/man-pages/online/pages/man2/stat.2.html
return (int64_t)st.st_mtime * 1000000000LL + st.st_mtimensec;
#endif
#endif