From: Martin Lewis Date: Sun, 15 Sep 2019 16:13:28 +0000 (+0200) Subject: libbb: Converted safe_read to safe_write format X-Git-Tag: 1_32_0~140 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=dd4686128290b34d61becaaba88c54d5213f7aa5;p=oweals%2Fbusybox.git libbb: Converted safe_read to safe_write format Changed safe_read to be symmetrical to safe_write, it shall never return EINTR because it calls read multiple times, the error is considered transient. function old new delta safe_read 44 57 +13 Signed-off-by: Martin Lewis Signed-off-by: Denys Vlasenko --- diff --git a/libbb/read.c b/libbb/read.c index 5906bc225..a342506a8 100644 --- a/libbb/read.c +++ b/libbb/read.c @@ -12,9 +12,17 @@ ssize_t FAST_FUNC safe_read(int fd, void *buf, size_t count) { ssize_t n; - do { + for (;;) { n = read(fd, buf, count); - } while (n < 0 && errno == EINTR); + if (n >= 0 || errno != EINTR) + break; + /* Some callers set errno=0, are upset when they see EINTR. + * Returning EINTR is wrong since we retry read(), + * the "error" was transient. + */ + errno = 0; + /* repeat the read() */ + } return n; }