diff options
Diffstat (limited to 'src/internal/shgetc.c')
-rw-r--r-- | src/internal/shgetc.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/internal/shgetc.c b/src/internal/shgetc.c new file mode 100644 index 00000000..7c4e58c1 --- /dev/null +++ b/src/internal/shgetc.c @@ -0,0 +1,24 @@ +#include "shgetc.h" + +void __shlim(FILE *f, off_t lim) +{ + f->shlim = lim; + f->shcnt = f->rend ? f->rend - f->buf : 0; + if (lim && f->rend - f->rpos > lim) + f->shend = f->rpos + lim; + else + f->shend = f->rend; +} + +int __shgetc(FILE *f) +{ + int c; + if (f->shcnt >= f->shlim) return EOF; + c = __uflow(f); + if (f->shlim && f->rend - f->rpos > f->shlim - f->shcnt - 1) + f->shend = f->rpos + (f->shlim - f->shcnt - 1); + else + f->shend = f->rend; + if (f->rend) f->shcnt += f->rend - f->buf; + return c; +} |