fix public clone function to be safe and usable by applications
[musl] / src / internal / shgetc.c
index ebd5fae..7455d2f 100644 (file)
@@ -22,7 +22,8 @@ int __shgetc(FILE *f)
        off_t cnt = shcnt(f);
        if (f->shlim && cnt >= f->shlim || (c=__uflow(f)) < 0) {
                f->shcnt = f->buf - f->rpos + cnt;
-               f->shend = 0;
+               f->shend = f->rpos;
+               f->shlim = -1;
                return EOF;
        }
        cnt++;
@@ -31,6 +32,6 @@ int __shgetc(FILE *f)
        else
                f->shend = f->rend;
        f->shcnt = f->buf - f->rpos + cnt;
-       if (f->rpos[-1] != c) f->rpos[-1] = c;
+       if (f->rpos <= f->buf) f->rpos[-1] = c;
        return c;
 }