summaryrefslogtreecommitdiff
path: root/lockfile.c
diff options
context:
space:
mode:
authorSteffen Prohaska <prohaska@zib.de>2014-08-26 17:23:24 +0200
committerJunio C Hamano <gitster@pobox.com>2014-08-28 10:25:14 -0700
commitb29763aa9bcbb99a59aec3820e30ff1864cfa765 (patch)
treed3dcda097520b70a990e48e7ea52b9bbb9ad206d /lockfile.c
parent02710228dd79d9f9c6fa180233491639b603c06d (diff)
downloadgit-b29763aa9bcbb99a59aec3820e30ff1864cfa765.tar.gz
copy_fd(): do not close the input file descriptor
The caller, not this function, opened the file descriptor; it is selfish for the callee to close it when it is done reading from it. The caller may want an option to rewind and re-read the contents after it returns. Simplify the loop to copy the input in full to the output; its body essentially is what a call to write_in_full() helper does. Signed-off-by: Steffen Prohaska <prohaska@zib.de> Helped-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'lockfile.c')
-rw-r--r--lockfile.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/lockfile.c b/lockfile.c
index 2564a7f544..2448d30cd0 100644
--- a/lockfile.c
+++ b/lockfile.c
@@ -224,8 +224,11 @@ int hold_lock_file_for_append(struct lock_file *lk, const char *path, int flags)
} else if (copy_fd(orig_fd, fd)) {
if (flags & LOCK_DIE_ON_ERROR)
exit(128);
+ close(orig_fd);
close(fd);
return -1;
+ } else {
+ close(orig_fd);
}
return fd;
}