aboutsummaryrefslogtreecommitdiff
path: root/lib/io/src/istream.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/io/src/istream.c')
-rw-r--r--lib/io/src/istream.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/lib/io/src/istream.c b/lib/io/src/istream.c
index 2b89a00..0739fd6 100644
--- a/lib/io/src/istream.c
+++ b/lib/io/src/istream.c
@@ -16,7 +16,7 @@ sqfs_s32 istream_read(istream_t *strm, void *data, size_t size)
size = 0x7FFFFFFF;
while (size > 0) {
- if (strm->buffer_offset >= strm->buffer_used) {
+ if (strm->buffer_used == 0) {
if (istream_precache(strm))
return -1;
@@ -24,13 +24,14 @@ sqfs_s32 istream_read(istream_t *strm, void *data, size_t size)
break;
}
- diff = strm->buffer_used - strm->buffer_offset;
+ diff = strm->buffer_used;
if (diff > size)
diff = size;
- memcpy(data, strm->buffer + strm->buffer_offset, diff);
+ memcpy(data, strm->buffer, diff);
data = (char *)data + diff;
- strm->buffer_offset += diff;
+ strm->buffer += diff;
+ strm->buffer_used -= diff;
size -= diff;
total += diff;
}
@@ -43,7 +44,7 @@ int istream_skip(istream_t *strm, sqfs_u64 size)
size_t diff;
while (size > 0) {
- if (strm->buffer_offset >= strm->buffer_used) {
+ if (strm->buffer_used == 0) {
if (istream_precache(strm))
return -1;
@@ -54,11 +55,12 @@ int istream_skip(istream_t *strm, sqfs_u64 size)
}
}
- diff = strm->buffer_used - strm->buffer_offset;
+ diff = strm->buffer_used;
if ((sqfs_u64)diff > size)
diff = size;
- strm->buffer_offset += diff;
+ strm->buffer += diff;
+ strm->buffer_used -= diff;
size -= diff;
}
@@ -74,7 +76,7 @@ sqfs_s32 istream_splice(istream_t *in, ostream_t *out, sqfs_u32 size)
size = 0x7FFFFFFF;
while (size > 0) {
- if (in->buffer_offset >= in->buffer_used) {
+ if (in->buffer_used == 0) {
if (istream_precache(in))
return -1;
@@ -82,14 +84,15 @@ sqfs_s32 istream_splice(istream_t *in, ostream_t *out, sqfs_u32 size)
break;
}
- diff = in->buffer_used - in->buffer_offset;
+ diff = in->buffer_used;
if (diff > size)
diff = size;
- if (ostream_append(out, in->buffer + in->buffer_offset, diff))
+ if (ostream_append(out, in->buffer, diff))
return -1;
- in->buffer_offset += diff;
+ in->buffer += diff;
+ in->buffer_used -= diff;
size -= diff;
total += diff;
}