diff options
Diffstat (limited to 'system/lib/libc/musl/src/internal/shgetc.c')
-rw-r--r-- | system/lib/libc/musl/src/internal/shgetc.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/system/lib/libc/musl/src/internal/shgetc.c b/system/lib/libc/musl/src/internal/shgetc.c new file mode 100644 index 00000000..e878b00a --- /dev/null +++ b/system/lib/libc/musl/src/internal/shgetc.c @@ -0,0 +1,27 @@ +#include "shgetc.h" + +void __shlim(FILE *f, off_t lim) +{ + f->shlim = lim; + f->shcnt = f->rend - f->rpos; + if (lim && f->shcnt > lim) + f->shend = f->rpos + lim; + else + f->shend = f->rend; +} + +int __shgetc(FILE *f) +{ + int c; + if (f->shlim && f->shcnt >= f->shlim || (c=__uflow(f)) < 0) { + f->shend = 0; + return EOF; + } + 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->rpos + 1; + if (f->rpos[-1] != c) f->rpos[-1] = c; + return c; +} |