summaryrefslogtreecommitdiffstats
path: root/src/deps_log.cc
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2013-04-09 16:58:54 (GMT)
committerNico Weber <nicolasweber@gmx.de>2013-04-09 16:58:54 (GMT)
commiteee4910fb7189773074e4c89d4ba249704ba5d11 (patch)
tree7507aea9e47e690aca8d6dd7eb07e8de808470e0 /src/deps_log.cc
parent8b9e3eaf7e7d2af4539eae167f92993f5ab84b86 (diff)
downloadNinja-eee4910fb7189773074e4c89d4ba249704ba5d11.zip
Ninja-eee4910fb7189773074e4c89d4ba249704ba5d11.tar.gz
Ninja-eee4910fb7189773074e4c89d4ba249704ba5d11.tar.bz2
On invalid depslog header, restart build instead of showing an error.
Also add tests for invalid headers.
Diffstat (limited to 'src/deps_log.cc')
-rw-r--r--src/deps_log.cc14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/deps_log.cc b/src/deps_log.cc
index 8946e32..79daba5 100644
--- a/src/deps_log.cc
+++ b/src/deps_log.cc
@@ -136,16 +136,12 @@ bool DepsLog::Load(const string& path, State* state, string* err) {
return false;
}
- if (!fgets(buf, sizeof(buf), f)) {
- *err = strerror(errno);
- return false;
- }
+ bool valid_header = true;
int version = 0;
- if (fread(&version, 4, 1, f) < 1) {
- *err = strerror(errno);
- return false;
- }
- if (version != kCurrentVersion) {
+ if (!fgets(buf, sizeof(buf), f) || fread(&version, 4, 1, f) < 1)
+ valid_header = false;
+ if (!valid_header || strcmp(buf, kFileSignature) != 0 ||
+ version != kCurrentVersion) {
*err = "bad deps log signature or version; starting over";
fclose(f);
unlink(path.c_str());