minor perf enhancement for UTF-8
Reduce some duplicate code. Reference: https://www.illumos.org/issues/628 Obtained from: Illumos MFC after: 1 week
This commit is contained in:
parent
a913717b0d
commit
0716c0ff7a
@ -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, const char * __restrict s, size_t n,
|
||||
/* 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, const char * __restrict s, size_t n,
|
||||
*/
|
||||
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;
|
||||
@ -316,12 +312,6 @@ _UTF8_wcrtomb(char * __restrict s, wchar_t wc, mbstate_t * __restrict ps)
|
||||
/* 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
|
||||
@ -329,8 +319,9 @@ _UTF8_wcrtomb(char * __restrict s, wchar_t wc, mbstate_t * __restrict ps)
|
||||
* 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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user