On Fri, Feb 05, 2016 at 03:53:44PM +0100, Ingo Schwarze wrote:
> Index: mbtowc.c
> ===================================================================
> RCS file: /cvs/src/lib/libc/locale/mbtowc.c,v
> retrieving revision 1.2
> diff -u -p -r1.2 mbtowc.c
> --- mbtowc.c 5 Dec 2012 23:20:00 -0000 1.2
> +++ mbtowc.c 5 Feb 2016 13:26:17 -0000
> @@ -44,7 +44,14 @@ mbtowc(wchar_t * __restrict pwc, const c
> return (0);
> }
> rval = mbrtowc(pwc, s, n, &mbs);
> - if (rval == (size_t)-1 || rval == (size_t)-2)
> - return (-1);
> - return ((int)rval);
> +
> + switch (rval) {
> + case (size_t)-2:
> + errno = EILSEQ;
Doesn't mbrtowc(3) already set errno to EILSEQ when it returns (size_t)-2?
At least our man page says it would:
(size_t)-2 s points to an incomplete byte sequence of length n which
has been consumed and contains part of a valid multibyte
character. mbrtowc() sets errno to EILSEQ. The character
Though citrus_utf8.c doesn't seem to do this... hmmm.
Perhaps you should fix mbrtowc() instead?
> + /* FALLTHROUGH */
> + case (size_t)-1:
> + return -1;
> + default:
> + return (int)rval;
> + }
> }