author | Rich Felker <dalias@aerifal.cx> | 2015年06月06日 18:11:17 +0000 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2015年06月06日 18:11:17 +0000 |
commit | 7e816a6487932cbb3cb71d94b609e50e81f4e5bf (patch) | |
tree | 3742adde5771700ba3ca39682b5105e518e87e82 /src/stdio/ungetwc.c | |
parent | 63f4b9f18f3674124d8bcb119739fec85e6da005 (diff) | |
download | musl-7e816a6487932cbb3cb71d94b609e50e81f4e5bf.tar.gz |
-rw-r--r-- | src/stdio/ungetwc.c | 9 |
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; |