select: fix 64-bit timeout truncation on pre-time64 kernels
[musl] / src / stdio / __toread.c
index f00cc46..f142ff0 100644 (file)
@@ -3,12 +3,17 @@
 int __toread(FILE *f)
 {
        f->mode |= f->mode-1;
-       if (f->wpos > f->buf) f->write(f, 0, 0);
+       if (f->wpos != f->wbase) f->write(f, 0, 0);
        f->wpos = f->wbase = f->wend = 0;
-       if (f->flags & (F_EOF|F_NORD)) {
-               if (f->flags & F_NORD) f->flags |= F_ERR;
+       if (f->flags & F_NORD) {
+               f->flags |= F_ERR;
                return EOF;
        }
-       f->rpos = f->rend = f->buf;
-       return 0;
+       f->rpos = f->rend = f->buf + f->buf_size;
+       return (f->flags & F_EOF) ? EOF : 0;
+}
+
+hidden void __toread_needs_stdio_exit()
+{
+       __stdio_exit_needed();
 }