提交 7e816a64 编写于 作者: R Rich Felker

remove invalid skip of locking in ungetwc

aside from being invalid, the early check only optimized the error
case, and likely pessimized the common case by separating the
two branches on isascii(c) at opposite ends of the function.
上级 63f4b9f1
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册