diff options
Diffstat (limited to 'src/stdio')
| -rw-r--r-- | src/stdio/ungetwc.c | 9 | 
1 files changed, 3 insertions, 6 deletions
| diff --git a/src/stdio/ungetwc.c b/src/stdio/ungetwc.c index 913f7168..0a4cd7a1 100644 --- a/src/stdio/ungetwc.c +++ b/src/stdio/ungetwc.c @@ -11,18 +11,15 @@ wint_t ungetwc(wint_t c, FILE *f)  	if (c == WEOF) return c; -	/* Try conversion early so we can fail without locking if invalid */ -	if (!isascii(c) && (l = wctomb((void *)mbc, c)) < 0) -		return WEOF; -  	FLOCK(f);  	f->mode |= f->mode+1;  	if (!f->rpos) __toread(f); -	if (!f->rpos || f->rpos < f->buf - UNGET + l) { +	if (!f->rpos || f->rpos < f->buf - UNGET + l || +	    (!isascii(c) && (l = wctomb((void *)mbc, c)) < 0)) {  		FUNLOCK(f); -		return EOF; +		return WEOF;  	}  	if (isascii(c)) *--f->rpos = c; | 
