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
}