aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoder_buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/decoder_buffer.c')
-rw-r--r--src/decoder_buffer.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/decoder_buffer.c b/src/decoder_buffer.c
index 76e9126ef..b6fa90004 100644
--- a/src/decoder_buffer.c
+++ b/src/decoder_buffer.c
@@ -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;
+ }
+}