decoder/API: add decoder_read_much()
This commit is contained in:
@@ -42,6 +42,27 @@ decoder_read(DecoderClient *client,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
decoder_read_much(DecoderClient *client, InputStream &is,
|
||||||
|
void *_buffer, size_t size) noexcept
|
||||||
|
{
|
||||||
|
uint8_t *buffer = (uint8_t *)_buffer;
|
||||||
|
|
||||||
|
size_t total = 0;
|
||||||
|
|
||||||
|
while (size > 0 && !is.LockIsEOF()) {
|
||||||
|
size_t nbytes = decoder_read(client, is, buffer, size);
|
||||||
|
if (nbytes == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
total += nbytes;
|
||||||
|
buffer += nbytes;
|
||||||
|
size -= nbytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
decoder_read_full(DecoderClient *client, InputStream &is,
|
decoder_read_full(DecoderClient *client, InputStream &is,
|
||||||
void *_buffer, size_t size) noexcept
|
void *_buffer, size_t size) noexcept
|
||||||
|
@@ -74,6 +74,18 @@ decoder_read(DecoderClient &decoder, InputStream &is,
|
|||||||
return decoder_read(&decoder, is, buffer, length);
|
return decoder_read(&decoder, is, buffer, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Blocking read from the input stream. Attempts to fill the buffer
|
||||||
|
* as much as possible, until either end-of-file is reached or an
|
||||||
|
* error occurs.
|
||||||
|
*
|
||||||
|
* @return the number of bytes read, or 0 if one of the following
|
||||||
|
* occurs: end of file; error; command (like SEEK or STOP).
|
||||||
|
*/
|
||||||
|
size_t
|
||||||
|
decoder_read_much(DecoderClient *decoder, InputStream &is,
|
||||||
|
void *buffer, size_t size) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Blocking read from the input stream. Attempts to fill the buffer
|
* Blocking read from the input stream. Attempts to fill the buffer
|
||||||
* completely; there is no partial result.
|
* completely; there is no partial result.
|
||||||
|
Reference in New Issue
Block a user