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();
}