summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2019-03-25 08:58:35 +0100
committerMax Kellermann <max@musicpd.org>2019-03-25 08:59:34 +0100
commit93d91936b5c3052d4e7630fa89fb8831e26d7efa (patch)
treefc9c379047abc32cee71caeae41d4872414a2d4b
parent2220383d83583cfc8fa8e26c871fc0c403171158 (diff)
test/run_filter: check for partial writes
-rw-r--r--test/run_filter.cxx17
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 */