diff options
author | Nico Weber <nicolasweber@gmx.de> | 2017-09-04 02:15:13 (GMT) |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2017-09-04 02:15:13 (GMT) |
commit | 0c671527322d15016bb9ff5c3cf436f68e6ddbde (patch) | |
tree | cf9625c31e7ad023606c3881c6c759c8572c45c9 /src/disk_interface.cc | |
parent | 256bf897b85e35bc90294090ad39b5214eb141fb (diff) | |
parent | b98941a605d3cc47966d8407ace6e454d781af9b (diff) | |
download | Ninja-0c671527322d15016bb9ff5c3cf436f68e6ddbde.zip Ninja-0c671527322d15016bb9ff5c3cf436f68e6ddbde.tar.gz Ninja-0c671527322d15016bb9ff5c3cf436f68e6ddbde.tar.bz2 |
v1.8.0v1.8.0
Diffstat (limited to 'src/disk_interface.cc')
-rw-r--r-- | src/disk_interface.cc | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/disk_interface.cc b/src/disk_interface.cc index 451a9b4..28530b1 100644 --- a/src/disk_interface.cc +++ b/src/disk_interface.cc @@ -28,6 +28,7 @@ #include <direct.h> // _mkdir #endif +#include "metrics.h" #include "util.h" namespace { @@ -80,20 +81,15 @@ TimeStamp StatSingleFile(const string& path, string* err) { return TimeStampFromFileTime(attrs.ftLastWriteTime); } -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable: 4996) // GetVersionExA is deprecated post SDK 8.1. -#endif bool IsWindows7OrLater() { - OSVERSIONINFO version_info = { sizeof(version_info) }; - if (!GetVersionEx(&version_info)) - Fatal("GetVersionEx: %s", GetLastErrorString().c_str()); - return version_info.dwMajorVersion > 6 || - (version_info.dwMajorVersion == 6 && version_info.dwMinorVersion >= 1); + OSVERSIONINFOEX version_info = + { sizeof(OSVERSIONINFOEX), 6, 1, 0, 0, {0}, 0, 0, 0, 0, 0}; + DWORDLONG comparison = 0; + VER_SET_CONDITION(comparison, VER_MAJORVERSION, VER_GREATER_EQUAL); + VER_SET_CONDITION(comparison, VER_MINORVERSION, VER_GREATER_EQUAL); + return VerifyVersionInfo( + &version_info, VER_MAJORVERSION | VER_MINORVERSION, comparison); } -#ifdef _MSC_VER -#pragma warning(pop) -#endif bool StatAllFilesInDir(const string& dir, map<string, TimeStamp>* stamps, string* err) { @@ -153,6 +149,7 @@ bool DiskInterface::MakeDirs(const string& path) { // RealDiskInterface ----------------------------------------------------------- TimeStamp RealDiskInterface::Stat(const string& path, string* err) const { + METRIC_RECORD("node stat"); #ifdef _WIN32 // MSDN: "Naming Files, Paths, and Namespaces" // http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx @@ -190,6 +187,11 @@ TimeStamp RealDiskInterface::Stat(const string& path, string* err) const { *err = "stat(" + path + "): " + strerror(errno); return -1; } + // Some users (Flatpak) set mtime to 0, this should be harmless + // and avoids conflicting with our return value of 0 meaning + // that it doesn't exist. + if (st.st_mtime == 0) + return 1; return st.st_mtime; #endif } |