Many callers of read_in_full() complain when we do not read
their full byte-count. But a check like:
if (read_in_full(fd, buf, len) != len)
return error_errno("unable to read");
conflates two problem conditions:
1. A real error from read().
2. There were fewer than "len" bytes available.
In the first case, showing the user strerror(errno) is
useful. But in the second, we may see a random errno that
was set by some previous system call.
In an ideal world, callers would always distinguish between
these cases and give a useful message for each. But as an
easy way to make our imperfect world better, let's reset
errno to a known value. The best we can do is "0", which
will yield something like:
unable to read: Success
That's not great, but at least it's deterministic and makes
it clear that we didn't see an error from read().
Signed-off-by: Jeff King <[email protected]>
---
wrapper.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/wrapper.c b/wrapper.c
index 61aba0b5c1..f55debc92d 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -314,6 +314,7 @@ ssize_t read_in_full(int fd, void *buf, size_t count)
char *p = buf;
ssize_t total = 0;
+ errno = 0;
while (count > 0) {
ssize_t loaded = xread(fd, p, count);
if (loaded < 0)
--
2.14.1.1148.ga2561536a1