|
Message-Id: <20220209175557.25235-1-xdavidwuph@gmail.com> Date: Thu, 10 Feb 2022 01:55:57 +0800 From: Pinghao Wu <xdavidwuph@...il.com> To: musl@...ts.openwall.com Cc: Pinghao Wu <xdavidwuph@...il.com> Subject: [PATCH] fgetwc: fix errno when character span aver buffer end If attempt on converting character from buffer failed, errno is set to EILSEQ by mbtowc. As a result, if further byte-by-byte conversion succeeds, fgetwc will return a valid wchar with a misleading EILSEQ as errno. This fixes it by saving errno before the from buffer attempt, and restore if it fails. This also fixes fgetws which find the misleading EILSEQ and fails in this case. --- src/stdio/fgetwc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/stdio/fgetwc.c b/src/stdio/fgetwc.c index aa10b818..9dad0505 100644 --- a/src/stdio/fgetwc.c +++ b/src/stdio/fgetwc.c @@ -8,6 +8,7 @@ static wint_t __fgetwc_unlocked_internal(FILE *f) wchar_t wc; int c; size_t l; + int errno_save = errno; /* Convert character from buffer if possible */ if (f->rpos != f->rend) { @@ -16,6 +17,7 @@ static wint_t __fgetwc_unlocked_internal(FILE *f) f->rpos += l + !l; /* l==0 means 1 byte, null */ return wc; } + errno = errno_save; } /* Convert character byte-by-byte */ -- 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.