From 418eb09482ddef66352e6677211ca3341267223d Mon Sep 17 00:00:00 2001 From: Egor Chelak Date: Fri, 6 Nov 2020 21:09:14 +0200 Subject: [PATCH] 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 --- include/all-io.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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; -- 2.47.3