summaryrefslogtreecommitdiffstats
path: root/src/disk_interface.cc
diff options
context:
space:
mode:
authorNico Weber <thakis@chromium.org>2014-06-15 05:18:28 (GMT)
committerNico Weber <thakis@chromium.org>2014-06-15 21:13:53 (GMT)
commit9970174e2ab8e4d5c9f333b795c8d284cf1cb8f5 (patch)
tree315f9c80daaac276735d7f98a66ab7308cbb9bc5 /src/disk_interface.cc
parentf9c23f8fad43997a08b7e2f7e4c56cc9d9bcb5e1 (diff)
downloadNinja-9970174e2ab8e4d5c9f333b795c8d284cf1cb8f5.zip
Ninja-9970174e2ab8e4d5c9f333b795c8d284cf1cb8f5.tar.gz
Ninja-9970174e2ab8e4d5c9f333b795c8d284cf1cb8f5.tar.bz2
error checking
Diffstat (limited to 'src/disk_interface.cc')
-rw-r--r--src/disk_interface.cc19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/disk_interface.cc b/src/disk_interface.cc
index b7943ef..cd99915 100644
--- a/src/disk_interface.cc
+++ b/src/disk_interface.cc
@@ -81,25 +81,28 @@ TimeStamp StatSingleFile(const string& path, bool quiet) {
return TimeStampFromFileTime(attrs.ftLastWriteTime);
}
-void StatAllFilesInDir(const string& dir, map<string, TimeStamp>* stamps) {
+void StatAllFilesInDir(const string& dir, map<string, TimeStamp>* stamps,
+ bool quiet) {
// FindExInfoBasic is 30% faster than FindExInfoStandard.
WIN32_FIND_DATAA ffd;
HANDLE hFind = FindFirstFileExA((dir + "\\*").c_str(), FindExInfoBasic, &ffd,
FindExSearchNameMatch, NULL, 0);
if (hFind == INVALID_HANDLE_VALUE) {
- fprintf(stderr, "fail %s", dir.c_str());
- exit(-1);
+ DWORD err = GetLastError();
+ if (err != ERROR_FILE_NOT_FOUND && err != ERROR_PATH_NOT_FOUND && !quiet) {
+ Error("FindFirstFileExA(%s): %s", dir.c_str(),
+ GetLastErrorString().c_str());
+ }
+ return;
}
do {
if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
continue;
-
string lowername = ffd.cFileName;
transform(lowername.begin(), lowername.end(), lowername.begin(), ::tolower);
-
- const FILETIME& filetime = ffd.ftLastWriteTime;
- (*stamps).insert(make_pair(lowername, TimeStampFromFileTime(filetime)));
+ stamps->insert(make_pair(lowername,
+ TimeStampFromFileTime(ffd.ftLastWriteTime)));
} while (FindNextFileA(hFind, &ffd));
FindClose(hFind);
}
@@ -150,7 +153,7 @@ TimeStamp RealDiskInterface::Stat(const string& path) {
Cache::iterator ci = cache_.find(dir);
if (ci == cache_.end()) {
DirCache* dc = new DirCache;
- StatAllFilesInDir(dir.empty() ? "." : dir, dc);
+ StatAllFilesInDir(dir.empty() ? "." : dir, dc, quiet_);
ci = cache_.insert(make_pair(dir, dc)).first;
}
DirCache::iterator di = ci->second->find(base);