|
Message-Id: <20220209184736.26792-1-xdavidwuph@gmail.com> Date: Thu, 10 Feb 2022 02:47:36 +0800 From: Pinghao Wu <xdavidwuph@...il.com> To: musl@...ts.openwall.com Cc: Pinghao Wu <xdavidwuph@...il.com> Subject: [PATCH] fgetws: fix checking for fgetwc errors This corrects checking for fgetwc errors by arming dummy errno before each invocation, and checking errors only if it returns WEOF. --- src/stdio/fgetws.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/stdio/fgetws.c b/src/stdio/fgetws.c index b08b3049..edcd769b 100644 --- a/src/stdio/fgetws.c +++ b/src/stdio/fgetws.c @@ -12,18 +12,19 @@ wchar_t *fgetws(wchar_t *restrict s, int n, FILE *restrict f) FLOCK(f); - /* Setup a dummy errno so we can detect EILSEQ. This is - * the only way to catch encoding errors in the form of a - * partial character just before EOF. */ - errno = EAGAIN; + wint_t c; for (; n; n--) { - wint_t c = __fgetwc_unlocked(f); + /* Setup a dummy errno so we can detect EILSEQ. This is + * the only way to catch encoding errors in the form of a + * partial character just before EOF. */ + errno = EAGAIN; + c = __fgetwc_unlocked(f); if (c == WEOF) break; *p++ = c; if (c == '\n') break; } *p = 0; - if (ferror(f) || errno==EILSEQ) p = s; + if (c == WEOF && (ferror(f) || errno==EILSEQ)) p = s; FUNLOCK(f); -- 2.35.1
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.