Commit 3e8c5e45cbf4f52b1100e7ae9f5cc229882b6f4d

Edward Thomson 2015-06-10T16:43:48

Merge pull request #3174 from libgit2/cmn/idx-fill-hole indexer: use lseek to extend the packfile

diff --git a/src/indexer.c b/src/indexer.c
index ef2ac3c..512addf 100644
--- a/src/indexer.c
+++ b/src/indexer.c
@@ -478,13 +478,14 @@ static int write_at(git_indexer *idx, const void *data, git_off_t offset, size_t
 static int append_to_pack(git_indexer *idx, const void *data, size_t size)
 {
 	git_off_t current_size = idx->pack->mwf.size;
+	int fd = idx->pack->mwf.fd;
 
 	if (!size)
 		return 0;
 
-	/* add the extra space we need at the end */
-	if (p_ftruncate(idx->pack->mwf.fd, current_size + size) < 0) {
-		giterr_set(GITERR_OS, "Failed to increase size of pack file '%s'", idx->pack->pack_name);
+	if (p_lseek(fd, current_size + size - 1, SEEK_SET) < 0 ||
+	    p_write(idx->pack->mwf.fd, data, 1) < 0) {
+		giterr_set(GITERR_OS, "cannot extend packfile '%s'", idx->pack->pack_name);
 		return -1;
 	}