diff options
Diffstat (limited to 'lib/io/src/mem.c')
-rw-r--r-- | lib/io/src/mem.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/lib/io/src/mem.c b/lib/io/src/mem.c index 4e9f9af..d305a83 100644 --- a/lib/io/src/mem.c +++ b/lib/io/src/mem.c @@ -26,8 +26,21 @@ typedef struct { static int mem_in_precache(istream_t *strm) { mem_istream_t *mem = (mem_istream_t *)strm; - size_t diff = mem->bufsz - strm->buffer_used; + size_t diff; + + if (strm->buffer_offset >= strm->buffer_used) { + strm->buffer_offset = 0; + strm->buffer_used = 0; + } else if (strm->buffer_offset > 0) { + memmove(strm->buffer, + strm->buffer + strm->buffer_offset, + strm->buffer_used - strm->buffer_offset); + + strm->buffer_used -= strm->buffer_offset; + strm->buffer_offset = 0; + } + diff = mem->bufsz - strm->buffer_used; if (diff > mem->size) diff = mem->size; |