diff options
author | Max Kellermann <max@musicpd.org> | 2019-03-25 08:58:35 +0100 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2019-03-25 08:59:34 +0100 |
commit | 93d91936b5c3052d4e7630fa89fb8831e26d7efa (patch) | |
tree | fc9c379047abc32cee71caeae41d4872414a2d4b | |
parent | 2220383d83583cfc8fa8e26c871fc0c403171158 (diff) |
test/run_filter: check for partial writes
-rw-r--r-- | test/run_filter.cxx | 17 |
1 files changed, 16 insertions, 1 deletions
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 */ |