Commit efb29007 authored by Max Kellermann's avatar Max Kellermann

decoder_buffer: added function decoder_buffer_skip()

parent 82c6c137
......@@ -138,3 +138,29 @@ decoder_buffer_consume(struct decoder_buffer *buffer, size_t nbytes)
assert(buffer->consumed <= buffer->length);
}
bool
decoder_buffer_skip(struct decoder_buffer *buffer, size_t nbytes)
{
size_t length;
const void *data;
bool success;
/* this could probably be optimized by seeking */
while (true) {
data = decoder_buffer_read(buffer, &length);
if (data != NULL) {
if (length > nbytes)
length = nbytes;
decoder_buffer_consume(buffer, length);
nbytes -= length;
if (nbytes == 0)
return true;
}
success = decoder_buffer_fill(buffer);
if (!success)
return false;
}
}
......@@ -93,4 +93,14 @@ decoder_buffer_read(const struct decoder_buffer *buffer, size_t *length_r);
void
decoder_buffer_consume(struct decoder_buffer *buffer, size_t nbytes);
/**
* Skips the specified number of bytes, discarding its data.
*
* @param buffer the decoder_buffer object
* @param nbytes the number of bytes to skip
* @return true on success, false on error
*/
bool
decoder_buffer_skip(struct decoder_buffer *buffer, size_t nbytes);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment