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;
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to