diff options
Diffstat (limited to 'nix/libstore/local-store.cc')
-rw-r--r-- | nix/libstore/local-store.cc | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/nix/libstore/local-store.cc b/nix/libstore/local-store.cc index 630cb80c41..b2c78477b6 100644 --- a/nix/libstore/local-store.cc +++ b/nix/libstore/local-store.cc @@ -288,7 +288,17 @@ LocalStore::LocalStore(bool reserveSpace) struct stat st; if (stat(reservedPath.c_str(), &st) == -1 || st.st_size != settings.reservedSize) - writeFile(reservedPath, string(settings.reservedSize, 'X')); + { + AutoCloseFD fd = open(reservedPath.c_str(), O_WRONLY | O_CREAT, 0600); + int res = -1; +#if HAVE_POSIX_FALLOCATE + res = posix_fallocate(fd, 0, settings.reservedSize); +#endif + if (res == -1) { + writeFull(fd, string(settings.reservedSize, 'X')); + ftruncate(fd, settings.reservedSize); + } + } } else deletePath(reservedPath); @@ -1166,10 +1176,8 @@ string LocalStore::getLineFromSubstituter(RunningSubstituter & run) if (n == 0) throw EndOfFile(format("substituter `%1%' died unexpectedly") % run.program); err.append(buf, n); string::size_type p; - while (((p = err.find('\n')) != string::npos) - || ((p = err.find('\r')) != string::npos)) { - string thing(err, 0, p + 1); - writeToStderr(run.program + ": " + thing); + while ((p = err.find('\n')) != string::npos) { + printMsg(lvlError, run.program + ": " + string(err, 0, p)); err = string(err, p + 1); } } |