strbuf_read_file(): preserve errno across close() call

If we encounter a read error, the user may want to report it by looking at errno. However, our close() call may clobber errno, leading to confusing results. Let's save and restore it in the error case. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Feb 23, 2018 at 02:00 UTC 79f0ba1547a34b3a9791491f9bbfe4048026f373
1 file changed +5 -1
strbuf.c
+5 -1
@@ -612,14 +612,18 @@ ssize_t strbuf_read_file(struct strbuf *sb, const char *path, size_t hint)
612 {
613 int fd;
614 ssize_t len;
615 + int saved_errno;
616
617 fd = open(path, O_RDONLY);
618 if (fd < 0)
619 return -1;
620 len = strbuf_read(sb, fd, hint);
621 + saved_errno = errno;
622 close(fd);
621 - if (len < 0)
623 + if (len < 0) {
624 + errno = saved_errno;
625 return -1;
626 + }
627
628 return len;
629 }