From 8d7cba497938020ee5e8f408e6a52cd37274722b Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Fri, 22 Sep 2023 08:14:38 +0000 Subject: Make /etc configurable; fix some bugs Signed-off-by: Laurent Bercot --- src/tipideed/send_file.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) (limited to 'src/tipideed/send_file.c') diff --git a/src/tipideed/send_file.c b/src/tipideed/send_file.c index 23a0373..2aeec65 100644 --- a/src/tipideed/send_file.c +++ b/src/tipideed/send_file.c @@ -99,25 +99,26 @@ void send_file (int fd, uint64_t n, char const *fn) { tain deadline ; struct iovec v[2] ; - while (n) + ssize_t r ; + if (!n) goto flushit ; /* I know, I know, but do-while SUCKS */ + fillit: + buffer_wpeek(buffer_1, v) ; + r = allreadv(fd, v, 2) ; + if (r == -1) strerr_diefu2sys(111, "read from ", fn) ; + if (!r) strerr_diefu3x(111, "serve ", fn, ": file was truncated") ; + if (r > n) { - ssize_t r ; - buffer_rpeek(buffer_1, v) ; - r = allreadv(fd, v, 2) ; - if (r == -1) strerr_diefu2sys(111, "read from ", fn) ; - if (!r) strerr_diefu3x(111, "serve ", fn, ": file was truncated") ; - if (r > n) - { - r = n ; - if (g.verbosity >= 2) - strerr_warnw2x("serving elongated file: ", fn) ; - } - buffer_rseek(buffer_1, r) ; - tain_add_g(&deadline, &g.writetto) ; - if (!buffer_timed_flush_g(buffer_1, &deadline)) - strerr_diefu1sys(111, "write to stdout") ; - n -= r ; + r = n ; + if (g.verbosity >= 2) + strerr_warnw2x("serving elongated file: ", fn) ; } + buffer_wseek(buffer_1, r) ; + n -= r ; + flushit: + tain_add_g(&deadline, &g.writetto) ; + if (!buffer_timed_flush_g(buffer_1, &deadline)) + strerr_diefu1sys(111, "write to stdout") ; + if (n) goto fillit ; } #endif -- cgit v1.3.1