diff options
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 | |
parent | 63f4b9f18f3674124d8bcb119739fec85e6da005 (diff) | |
download | musl-7e816a6487932cbb3cb71d94b609e50e81f4e5bf.tar.gz musl-7e816a6487932cbb3cb71d94b609e50e81f4e5bf.tar.bz2 musl-7e816a6487932cbb3cb71d94b609e50e81f4e5bf.tar.xz musl-7e816a6487932cbb3cb71d94b609e50e81f4e5bf.zip |
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.
-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; |