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;
> +     }
>  }

Reply via email to