diff --git a/input.c b/input.c index 3a5e06a..8e500b3 100644 --- a/input.c +++ b/input.c @@ -5,19 +5,24 @@ int readb(FILE *fp, unsigned char *s, int slen) { - unsigned char *send; - unsigned char *sbeg; + int read, tread; + unsigned char *send, *sbeg; unsigned char *l, *r; - sbeg = s; - send = s + fread(s, sizeof(*s), slen, fp); - for (l = r = sbeg; r < send; ++r) - if (*r != '\n') - *l++ = *r; - if (l > sbeg) { - for (--l; *l == PADDING; --l) - ; - ++l; + read = tread = 0; + sbeg = l = r = s; + while (tread < slen && (read = fread(l, sizeof(*l), slen-tread, fp))) { + tread += read; + send = s + tread; + for (r = l; r < send; ++r) + if (*r != '\n') + *l++ = *r; + tread -= r - l; + if (l > sbeg) { + for (--l; *l == PADDING; --l) + ; + ++l; + } } return l-sbeg;