1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-28 13:41:15 +02:00

Add an ftruncate call paired with fallocate to play safe with some FSes (namely, BtrFS fallocate sets file size to allocated size, i.e. multiple of block size)

This commit is contained in:
Michael Raskin 2009-05-04 08:10:24 +00:00
parent c710fe540e
commit 098cb9d233
2 changed files with 9 additions and 0 deletions

View file

@ -181,6 +181,8 @@ static void parseContents(ParseSink & sink, Source & source, const Path & path)
left -= n;
}
sink.finalizeContents(size);
readPadding(size, source);
}
@ -310,6 +312,12 @@ struct RestoreSink : ParseSink
writeFull(fd, data, len);
}
void finalizeContents(unsigned long long size)
{
errno = ftruncate(fd, size);
if (errno) throw SysError(format("truncating file to its allocated length of %1% bytes") % size);
}
void createSymlink(const Path & path, const string & target)
{
Path p = dstPath + path;