svn commit: r268573 - stable/9/lib/libc/locale

Pedro F. Giffuni pfg at FreeBSD.org
Sat Jul 12 18:30:36 UTC 2014


Author: pfg
Date: Sat Jul 12 18:30:35 2014
New Revision: 268573
URL: http://svnweb.freebsd.org/changeset/base/268573

Log:
  MFC	r268272:
  
  minor perf enhancement for UTF-8
  
  Reduce some duplicate code.
  
  Reference:
  https://www.illumos.org/issues/628
  
  Obtained from:	Illumos

Modified:
  stable/9/lib/libc/locale/utf8.c
Directory Properties:
  stable/9/lib/libc/   (props changed)

Modified: stable/9/lib/libc/locale/utf8.c
==============================================================================
--- stable/9/lib/libc/locale/utf8.c	Sat Jul 12 18:23:35 2014	(r268572)
+++ stable/9/lib/libc/locale/utf8.c	Sat Jul 12 18:30:35 2014	(r268573)
@@ -1,4 +1,5 @@
 /*-
+ * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
  * Copyright (c) 2002-2004 Tim J. Robbins
  * All rights reserved.
  *
@@ -112,13 +113,6 @@ _UTF8_mbrtowc(wchar_t * __restrict pwc, 
 		/* Incomplete multibyte sequence */
 		return ((size_t)-2);
 
-	if (us->want == 0 && ((ch = (unsigned char)*s) & ~0x7f) == 0) {
-		/* Fast path for plain ASCII characters. */
-		if (pwc != NULL)
-			*pwc = ch;
-		return (ch != '\0' ? 1 : 0);
-	}
-
 	if (us->want == 0) {
 		/*
 		 * Determine the number of octets that make up this character
@@ -134,10 +128,12 @@ _UTF8_mbrtowc(wchar_t * __restrict pwc, 
 		 */
 		ch = (unsigned char)*s;
 		if ((ch & 0x80) == 0) {
-			mask = 0x7f;
-			want = 1;
-			lbound = 0;
-		} else if ((ch & 0xe0) == 0xc0) {
+			/* Fast path for plain ASCII characters. */
+			if (pwc != NULL)
+				*pwc = ch;
+			return (ch != '\0' ? 1 : 0);
+		}
+		if ((ch & 0xe0) == 0xc0) {
 			mask = 0x1f;
 			want = 2;
 			lbound = 0x80;
@@ -309,12 +305,6 @@ _UTF8_wcrtomb(char * __restrict s, wchar
 		/* Reset to initial shift state (no-op) */
 		return (1);
 
-	if ((wc & ~0x7f) == 0) {
-		/* Fast path for plain ASCII characters. */
-		*s = (char)wc;
-		return (1);
-	}
-
 	/*
 	 * Determine the number of octets needed to represent this character.
 	 * We always output the shortest sequence possible. Also specify the
@@ -322,8 +312,9 @@ _UTF8_wcrtomb(char * __restrict s, wchar
 	 * about the sequence length.
 	 */
 	if ((wc & ~0x7f) == 0) {
-		lead = 0;
-		len = 1;
+		/* Fast path for plain ASCII characters. */
+		*s = (char)wc;
+		return (1);
 	} else if ((wc & ~0x7ff) == 0) {
 		lead = 0xc0;
 		len = 2;


More information about the svn-src-stable-9 mailing list