shgetc.c 521 B

1234567891011121314151617181920212223242526
  1. #include "shgetc.h"
  2. void __shlim(FILE *f, off_t lim)
  3. {
  4. f->shlim = lim;
  5. f->shcnt = f->rend - f->rpos;
  6. if (lim && f->shcnt > lim)
  7. f->shend = f->rpos + lim;
  8. else
  9. f->shend = f->rend;
  10. }
  11. int __shgetc(FILE *f)
  12. {
  13. int c;
  14. if (f->shlim && f->shcnt >= f->shlim || (c=__uflow(f)) < 0) {
  15. f->shend = 0;
  16. return EOF;
  17. }
  18. if (f->shlim && f->rend - f->rpos > f->shlim - f->shcnt - 1)
  19. f->shend = f->rpos + (f->shlim - f->shcnt - 1);
  20. else
  21. f->shend = f->rend;
  22. if (f->rend) f->shcnt += f->rend - f->rpos + 1;
  23. return c;
  24. }