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.
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 @@
 #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