io/FileDescriptor: add method FullRead()

This commit is contained in:
Max Kellermann
2019-11-18 21:25:04 +01:00
committed by Max Kellermann
parent 88446ccde9
commit 398281cd76
3 changed files with 29 additions and 18 deletions

View File

@@ -80,21 +80,6 @@ WriteOrThrow(FileDescriptor fd, const void *buffer, size_t size)
return nbytes;
}
static void
FullRead(FileDescriptor fd, void *_buffer, size_t size)
{
auto buffer = (uint8_t *)_buffer;
while (size > 0) {
size_t nbytes = ReadOrThrow(fd, buffer, size);
if (nbytes == 0)
throw std::runtime_error("Premature end of input");
buffer += nbytes;
size -= nbytes;
}
}
static void
FullWrite(FileDescriptor fd, ConstBuffer<uint8_t> src)
{
@@ -125,7 +110,7 @@ ReadFrames(FileDescriptor fd, void *_buffer, size_t size, size_t frame_size)
const size_t modulo = nbytes % frame_size;
if (modulo > 0) {
size_t rest = frame_size - modulo;
FullRead(fd, buffer + nbytes, rest);
fd.FullRead(buffer + nbytes, rest);
nbytes += rest;
}