diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2023-06-04 20:26:14 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2023-06-05 09:16:39 +0200 |
commit | 1370963723917eed6c93e28c9970a2b27be57ea4 (patch) | |
tree | 14c6e45fc1a4ccd1721823d65edd8a892135e23d /lib/io/src/mem.c | |
parent | 8af4ee6f415fe316894e4423235dfc4ee70d8cbb (diff) |
libio: remove buffer_offset from istream_t
Instead, make the buffer const, let the user adjust the pointer and
size. The offset can then be inferred in precache.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib/io/src/mem.c')
-rw-r--r-- | lib/io/src/mem.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/lib/io/src/mem.c b/lib/io/src/mem.c index d305a83..b1abbdb 100644 --- a/lib/io/src/mem.c +++ b/lib/io/src/mem.c @@ -10,6 +10,7 @@ #include <stdlib.h> #include <string.h> +#include <assert.h> typedef struct { istream_t base; @@ -28,17 +29,16 @@ static int mem_in_precache(istream_t *strm) mem_istream_t *mem = (mem_istream_t *)strm; 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); + assert(strm->buffer >= mem->buffer); + assert(strm->buffer <= (mem->buffer + mem->bufsz)); + assert(strm->buffer_used <= mem->bufsz); + assert((size_t)(strm->buffer - mem->buffer) <= + (mem->bufsz - strm->buffer_used)); - strm->buffer_used -= strm->buffer_offset; - strm->buffer_offset = 0; - } + if (strm->buffer_used > 0) + memmove(mem->buffer, strm->buffer, strm->buffer_used); + + strm->buffer = mem->buffer; diff = mem->bufsz - strm->buffer_used; if (diff > mem->size) |