svn commit: r296278 - head/lib/libc/locale

Pedro F. Giffuni pfg at FreeBSD.org
Tue Mar 1 19:15:35 UTC 2016


Author: pfg
Date: Tue Mar  1 19:15:34 2016
New Revision: 296278
URL: https://svnweb.freebsd.org/changeset/base/296278

Log:
  mbtowc(3): set errno to EILSEQ if an incomplete character is passed.
  
  According to POSIX, The mbtowc() function shall fail if:
  [EILSEQ] An invalid character sequence is detected.
  
  Reviewed by:		bapt
  Differential Revision:	https://reviews.freebsd.org/D5496
  
  Obtained from:	OpenBSD (Ingo Schwarze)
  MFC after:	1 month

Modified:
  head/lib/libc/locale/mbtowc.c

Modified: head/lib/libc/locale/mbtowc.c
==============================================================================
--- head/lib/libc/locale/mbtowc.c	Tue Mar  1 18:12:14 2016	(r296277)
+++ head/lib/libc/locale/mbtowc.c	Tue Mar  1 19:15:34 2016	(r296278)
@@ -32,6 +32,7 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#include <errno.h>
 #include <stdlib.h>
 #include <wchar.h>
 #include "mblocal.h"
@@ -49,9 +50,15 @@ mbtowc_l(wchar_t * __restrict pwc, const
 		return (0);
 	}
 	rval = XLOCALE_CTYPE(locale)->__mbrtowc(pwc, s, n, &locale->mbtowc);
-	if (rval == (size_t)-1 || rval == (size_t)-2)
+	switch (rval) {
+	case (size_t)-2:
+		errno = EILSEQ;
+		/* FALLTHROUGH */
+	case (size_t)-1:
 		return (-1);
-	return ((int)rval);
+	default:
+		return ((int)rval);
+	}
 }
 int
 mbtowc(wchar_t * __restrict pwc, const char * __restrict s, size_t n)


More information about the svn-src-all mailing list