From: Egor Chelak Date: Fri, 6 Nov 2020 19:09:14 +0000 (+0200) Subject: read_all: return 0 when EOF occurs after 0 bytes X-Git-Tag: v2.37-rc1~393^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=418eb09482ddef66352e6677211ca3341267223d;p=thirdparty%2Futil-linux.git read_all: return 0 when EOF occurs after 0 bytes Originally it would return -1 (without setting errno) if the fd was already at EOF when you called read_all. This is already fixed in sendfile_all. Reviewed-by: Sami Kerola Signed-off-by: Egor Chelak --- diff --git a/include/all-io.h b/include/all-io.h index 98745802c9..2c367a42d8 100644 --- a/include/all-io.h +++ b/include/all-io.h @@ -67,13 +67,15 @@ static inline ssize_t read_all(int fd, char *buf, size_t count) memset(buf, 0, count); while (count > 0) { ret = read(fd, buf, count); - if (ret <= 0) { - if (ret < 0 && (errno == EAGAIN || errno == EINTR) && (tries++ < 5)) { + if (ret < 0) { + if ((errno == EAGAIN || errno == EINTR) && (tries++ < 5)) { xusleep(250000); continue; } return c ? c : -1; } + if (ret == 0) + return c; tries = 0; count -= ret; buf += ret;