path: root/pkt-line.c
diff options
authorJeff King <>2019-03-05 04:11:39 (GMT)
committerJunio C Hamano <>2019-03-05 06:02:01 (GMT)
commit37c80012f1415bc4ff23def735a87cbd395bca31 (patch)
treee0bc7f5f016e97443f5ae9753cc52701123bdacd /pkt-line.c
parent0d0ac3826a3bbb9247e39e12623bbcfdd722f24c (diff)
fetch: avoid calling write_or_die()
The write_or_die() function has one quirk that a caller might not expect: when it sees EPIPE from the write() call, it translates that into a death by SIGPIPE. This doesn't change the overall behavior (the program exits either way), but it does potentially confuse test scripts looking for a non-signal exit code. Let's switch away from using write_or_die() in a few code paths, which will give us more consistent exit codes. It also gives us the opportunity to write more descriptive error messages, since we have context that write_or_die() does not. Note that this won't do much by itself, since we'd typically be killed by SIGPIPE before write_or_die() even gets a chance to do its thing. That will be addressed in the next patch. Signed-off-by: Jeff King <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'pkt-line.c')
1 files changed, 4 insertions, 2 deletions
diff --git a/pkt-line.c b/pkt-line.c
index 04d10bb..9944c7c 100644
--- a/pkt-line.c
+++ b/pkt-line.c
@@ -88,13 +88,15 @@ static void packet_trace(const char *buf, unsigned int len, int write)
void packet_flush(int fd)
packet_trace("0000", 4, 1);
- write_or_die(fd, "0000", 4);
+ if (write_in_full(fd, "0000", 4) < 0)
+ die_errno(_("unable to write flush packet"));
void packet_delim(int fd)
packet_trace("0001", 4, 1);
- write_or_die(fd, "0001", 4);
+ if (write_in_full(fd, "0001", 4) < 0)
+ die_errno(_("unable to write delim packet"));
int packet_flush_gently(int fd)