[git commit branch/1_27_stable] libbb: safe_write should not return EINTR
Denys Vlasenko
vda.linux at googlemail.com
Fri Aug 4 00:17:50 UTC 2017
commit: https://git.busybox.net/busybox/commit/?id=6bb89e1622668f649a94239f4b07aea539b1dad8
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/1_27_stable
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
libbb/safe_write.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/libbb/safe_write.c b/libbb/safe_write.c
index 8f76280..aad50f5 100644
--- a/libbb/safe_write.c
+++ b/libbb/safe_write.c
@@ -13,9 +13,17 @@ ssize_t FAST_FUNC safe_write(int fd, const void *buf, size_t count)
{
ssize_t n;
- do {
+ for (;;) {
n = write(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 write(),
+ * the "error" was transient.
+ */
+ errno = 0;
+ /* repeat the write() */
+ }
return n;
}
More information about the busybox-cvs
mailing list