summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--stream/stm_read.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/stream/stm_read.c b/stream/stm_read.c
index 12e6a288..0ab7e076 100644
--- a/stream/stm_read.c
+++ b/stream/stm_read.c
@@ -242,15 +242,26 @@ int fz_peekbytex(fz_stream *stm)
return EOF;
}
-int fz_read(fz_stream *stm, unsigned char *mem, int n)
+int fz_read(fz_stream *stm, unsigned char * restrict mem, int n)
{
fz_buffer *buf = stm->buffer;
int i = 0;
while (i < n)
{
+#if 0
while (buf->rp < buf->wp && i < n)
mem[i++] = *buf->rp++;
+#else
+ int l = buf->wp - buf->rp;
+ int ln = n;
+ unsigned char * restrict src = buf->rp;
+ ln = MIN(n - i, l) + i;
+ while (i < ln) {
+ mem[i++] = *src++;
+ }
+ buf->rp = src;
+#endif
if (buf->rp == buf->wp)
{
if (buf->eof) return i;