diff options
author | Max Kellermann <max@duempel.org> | 2014-07-12 02:26:38 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-07-12 02:26:38 +0200 |
commit | 543a58bb874be8a510d54e91a37797b0c71b1160 (patch) | |
tree | 3e96acdd508c3c621935b6ef9bb5536c7712d44b /src/decoder/DecoderBuffer.cxx | |
parent | b2b95cad20846bb3235787c266c1723acf38f971 (diff) |
DecoderBuffer: implement _skip() using decoder_skip()
Diffstat (limited to 'src/decoder/DecoderBuffer.cxx')
-rw-r--r-- | src/decoder/DecoderBuffer.cxx | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/src/decoder/DecoderBuffer.cxx b/src/decoder/DecoderBuffer.cxx index e26a702b7..7902e6e89 100644 --- a/src/decoder/DecoderBuffer.cxx +++ b/src/decoder/DecoderBuffer.cxx @@ -165,23 +165,14 @@ decoder_buffer_consume(DecoderBuffer *buffer, size_t nbytes) bool decoder_buffer_skip(DecoderBuffer *buffer, size_t nbytes) { - bool success; + const size_t available = decoder_buffer_available(buffer); + if (available >= nbytes) { + decoder_buffer_consume(buffer, nbytes); + return true; + } - /* this could probably be optimized by seeking */ + decoder_buffer_clear(buffer); + nbytes -= available; - while (true) { - auto data = decoder_buffer_read(buffer); - if (!data.IsEmpty()) { - if (data.size > nbytes) - data.size = nbytes; - decoder_buffer_consume(buffer, data.size); - nbytes -= data.size; - if (nbytes == 0) - return true; - } - - success = decoder_buffer_fill(buffer); - if (!success) - return false; - } + return decoder_skip(buffer->decoder, *buffer->is, nbytes); } |