[git commit] libbb: Converted safe_read to safe_write format
Denys Vlasenko
vda.linux at googlemail.com
Wed Oct 9 12:35:55 UTC 2019
commit: https://git.busybox.net/busybox/commit/?id=dd4686128290b34d61becaaba88c54d5213f7aa5
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master
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 <martin.lewis.x84 at gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
libbb/read.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
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;
}
More information about the busybox-cvs
mailing list