diff options
Diffstat (limited to 'lib/io/src/xfrm')
-rw-r--r-- | lib/io/src/xfrm/istream.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/io/src/xfrm/istream.c b/lib/io/src/xfrm/istream.c index 4a1ad77..b301209 100644 --- a/lib/io/src/xfrm/istream.c +++ b/lib/io/src/xfrm/istream.c @@ -20,6 +20,21 @@ static int xfrm_precache(istream_t *base) istream_xfrm_t *xfrm = (istream_xfrm_t *)base; int ret; + if (base->buffer_offset >= base->buffer_used) { + base->buffer_offset = 0; + base->buffer_used = 0; + } else if (base->buffer_offset > 0) { + memmove(base->buffer, + base->buffer + base->buffer_offset, + base->buffer_used - base->buffer_offset); + + base->buffer_used -= base->buffer_offset; + base->buffer_offset = 0; + } + + if (base->eof) + return 0; + ret = istream_precache(xfrm->wrapped); if (ret != 0) return ret; |