fix multiple stdio functions' behavior on zero-length operations
[oweals/musl.git] / src / stdio / ungetc.c
1 #include "stdio_impl.h"
2
3 int ungetc(int c, FILE *f)
4 {
5         if (c == EOF) return c;
6
7         FLOCK(f);
8
9         if ((!f->rend && __toread(f)) || f->rpos <= f->buf - UNGET) {
10                 FUNLOCK(f);
11                 return EOF;
12         }
13
14         *--f->rpos = c;
15         f->flags &= ~F_EOF;
16
17         FUNLOCK(f);
18         return c;
19 }