writeFile(): Add error context to writeFull() failure

Issue #4092.
This commit is contained in:
Eelco Dolstra 2020-10-09 16:02:53 +02:00
parent 636ec17139
commit 87157b2bd3

View file

@ -326,7 +326,12 @@ void writeFile(const Path & path, const string & s, mode_t mode)
AutoCloseFD fd = open(path.c_str(), O_WRONLY | O_TRUNC | O_CREAT | O_CLOEXEC, mode); AutoCloseFD fd = open(path.c_str(), O_WRONLY | O_TRUNC | O_CREAT | O_CLOEXEC, mode);
if (!fd) if (!fd)
throw SysError("opening file '%1%'", path); throw SysError("opening file '%1%'", path);
try {
writeFull(fd.get(), s); writeFull(fd.get(), s);
} catch (Error & e) {
e.addTrace({}, "writing file '%1%'", path);
throw;
}
} }
@ -338,12 +343,17 @@ void writeFile(const Path & path, Source & source, mode_t mode)
std::vector<unsigned char> buf(64 * 1024); std::vector<unsigned char> buf(64 * 1024);
try {
while (true) { while (true) {
try { try {
auto n = source.read(buf.data(), buf.size()); auto n = source.read(buf.data(), buf.size());
writeFull(fd.get(), (unsigned char *) buf.data(), n); writeFull(fd.get(), (unsigned char *) buf.data(), n);
} catch (EndOfFile &) { break; } } catch (EndOfFile &) { break; }
} }
} catch (Error & e) {
e.addTrace({}, "writing file '%1%'", path);
throw;
}
} }
string readLine(int fd) string readLine(int fd)