diff --git a/input.c b/input.c index aef154f..8e500b3 100644 --- a/input.c +++ b/input.c @@ -1,19 +1,29 @@ #include "input.h" #define PADDING '=' -#define SXTETBUF 4 int -getsxts(FILE *fp, unsigned char *s) +readb(FILE *fp, unsigned char *s, int slen) { - int c, n, pad; + int read, tread; + unsigned char *send, *sbeg; + unsigned char *l, *r; + + 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; + } + } - n = pad = 0; - while (n < SXTETBUF && (c = fgetc(fp)) != EOF && c != PADDING) - if (c != '\n') - s[n++] = c; - while (n+pad < SXTETBUF) - s[n+pad++] = PADDING; - - return n; + return l-sbeg; } diff --git a/input.h b/input.h index ca98ef2..901b2c4 100644 --- a/input.h +++ b/input.h @@ -4,6 +4,6 @@ #include int -getsxts(FILE *fp, unsigned char *s); +readb(FILE *fp, unsigned char *s, int slen); #endif diff --git a/main.c b/main.c index 66232cd..d7d8530 100644 --- a/main.c +++ b/main.c @@ -53,7 +53,7 @@ main(int argc, char *argv[]) exit(EXIT_FAILURE); } if (dec) { - while ((n = getsxts((in) ? in : stdin, sbuf))) { + while ((n = readb((in) ? in : stdin, sbuf, SXTETBUF))) { n = decode(sbuf, n, obuf, url); fwrite(obuf, sizeof(*obuf), n, (out) ? out : stdout); }