summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2020-04-29 12:26:06 +0800
committerXinchen Hui <laruence@gmail.com>2020-04-29 12:26:06 +0800
commit5a6373f904c6497551cd53baf323ddb854a553e1 (patch)
treeb70870a5c613cda410924ce919c6e7724f148e86
parent45cb42166d4a53fe0154be08097f112d6ec72a27 (diff)
parenta233e128a57e89eadfcb6668d75ff5bc6e40c713 (diff)
downloadphp-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.c40
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);
}
/* }}} */