From 93d91936b5c3052d4e7630fa89fb8831e26d7efa Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 25 Mar 2019 08:58:35 +0100 Subject: [PATCH] test/run_filter: check for partial writes --- test/run_filter.cxx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/test/run_filter.cxx b/test/run_filter.cxx index 805751943..5579888cf 100644 --- a/test/run_filter.cxx +++ b/test/run_filter.cxx @@ -94,6 +94,21 @@ FullRead(FileDescriptor fd, void *_buffer, size_t size) } } +static void +FullWrite(FileDescriptor fd, const void *_buffer, size_t size) +{ + auto buffer = (const uint8_t *)_buffer; + + while (size > 0) { + size_t nbytes = WriteOrThrow(fd, buffer, size); + if (nbytes == 0) + throw std::runtime_error("Premature end of input"); + + buffer += nbytes; + size -= nbytes; + } +} + static size_t ReadFrames(FileDescriptor fd, void *_buffer, size_t size, size_t frame_size) { @@ -162,7 +177,7 @@ try { break; auto dest = filter->FilterPCM({(const void *)buffer, (size_t)nbytes}); - WriteOrThrow(output_fd, dest.data, dest.size); + FullWrite(output_fd, dest.data, dest.size); } /* cleanup and exit */