summaryrefslogtreecommitdiffstats
path: root/src/disk_interface.cc
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 /src/disk_interface.cc
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.
Diffstat (limited to 'src/disk_interface.cc')
-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