diff options
author | Xinchen Hui <laruence@gmail.com> | 2020-04-29 12:26:06 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@gmail.com> | 2020-04-29 12:26:06 +0800 |
commit | 5a6373f904c6497551cd53baf323ddb854a553e1 (patch) | |
tree | b70870a5c613cda410924ce919c6e7724f148e86 | |
parent | 45cb42166d4a53fe0154be08097f112d6ec72a27 (diff) | |
parent | a233e128a57e89eadfcb6668d75ff5bc6e40c713 (diff) | |
download | php-git-5a6373f904c6497551cd53baf323ddb854a553e1.tar.gz |
Merge branch 'sse2_strtolower' of https://github.com/laruence/php-src
* 'sse2_strtolower' of https://github.com/laruence/php-src:
Use ascii lowercase if locale is default C
-rw-r--r-- | ext/standard/string.c | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/ext/standard/string.c b/ext/standard/string.c index c06de62a80..e8fe75cad1 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -1462,29 +1462,33 @@ PHPAPI zend_string *php_string_tolower(zend_string *s) unsigned char *c; const unsigned char *e; - c = (unsigned char *)ZSTR_VAL(s); - e = c + ZSTR_LEN(s); + if (EXPECTED(!BG(locale_changed))) { + return zend_string_tolower(s); + } else { + c = (unsigned char *)ZSTR_VAL(s); + e = c + ZSTR_LEN(s); - while (c < e) { - if (isupper(*c)) { - register unsigned char *r; - zend_string *res = zend_string_alloc(ZSTR_LEN(s), 0); + while (c < e) { + if (isupper(*c)) { + register unsigned char *r; + zend_string *res = zend_string_alloc(ZSTR_LEN(s), 0); - if (c != (unsigned char*)ZSTR_VAL(s)) { - memcpy(ZSTR_VAL(res), ZSTR_VAL(s), c - (unsigned char*)ZSTR_VAL(s)); - } - r = c + (ZSTR_VAL(res) - ZSTR_VAL(s)); - while (c < e) { - *r = tolower(*c); - r++; - c++; + if (c != (unsigned char*)ZSTR_VAL(s)) { + memcpy(ZSTR_VAL(res), ZSTR_VAL(s), c - (unsigned char*)ZSTR_VAL(s)); + } + r = c + (ZSTR_VAL(res) - ZSTR_VAL(s)); + while (c < e) { + *r = tolower(*c); + r++; + c++; + } + *r = '\0'; + return res; } - *r = '\0'; - return res; + c++; } - c++; + return zend_string_copy(s); } - return zend_string_copy(s); } /* }}} */ |