From 3054e5debba5ccf842346bd202921f08e43d1e84 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Wed, 3 Jan 2024 20:30:35 -0500 Subject: [PATCH] improve do_splice() --- cmd_fsck.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/cmd_fsck.c b/cmd_fsck.c index 81e589b..262ac1b 100644 --- a/cmd_fsck.c +++ b/cmd_fsck.c @@ -35,7 +35,7 @@ static void setnonblocking(int fd) static int do_splice(int rfd, int wfd) { - char buf[4096]; + char buf[4096], *b = buf; int r = read(rfd, buf, sizeof(buf)); if (r < 0 && errno == EAGAIN) @@ -44,8 +44,13 @@ static int do_splice(int rfd, int wfd) return r; if (!r) return 1; - if (write(wfd, buf, r) != r) - die("write error"); + do { + ssize_t w = write(wfd, b, r); + if (w < 0) + die("%s: write error: %m", __func__); + r -= w; + b += w; + } while (r); return 0; } -- 2.39.2