@@ -1346,52 +1346,15 @@ PHP_FUNCTION(strtok)
1346
1346
/* {{{ php_strtoupper */
1347
1347
PHPAPI char * php_strtoupper (char * s , size_t len )
1348
1348
{
1349
- unsigned char * c ;
1350
- const unsigned char * e ;
1351
-
1352
- c = (unsigned char * )s ;
1353
- e = (unsigned char * )c + len ;
1354
-
1355
- while (c < e ) {
1356
- * c = toupper (* c );
1357
- c ++ ;
1358
- }
1349
+ zend_str_toupper (s , len );
1359
1350
return s ;
1360
1351
}
1361
1352
/* }}} */
1362
1353
1363
1354
/* {{{ php_string_toupper */
1364
1355
PHPAPI zend_string * php_string_toupper (zend_string * s )
1365
1356
{
1366
- unsigned char * c ;
1367
- const unsigned char * e ;
1368
-
1369
- if (EXPECTED (!BG (ctype_string ))) {
1370
- return zend_string_toupper (s );
1371
- }
1372
- c = (unsigned char * )ZSTR_VAL (s );
1373
- e = c + ZSTR_LEN (s );
1374
-
1375
- while (c < e ) {
1376
- if (islower (* c )) {
1377
- unsigned char * r ;
1378
- zend_string * res = zend_string_alloc (ZSTR_LEN (s ), 0 );
1379
-
1380
- if (c != (unsigned char * )ZSTR_VAL (s )) {
1381
- memcpy (ZSTR_VAL (res ), ZSTR_VAL (s ), c - (unsigned char * )ZSTR_VAL (s ));
1382
- }
1383
- r = c + (ZSTR_VAL (res ) - ZSTR_VAL (s ));
1384
- while (c < e ) {
1385
- * r = toupper (* c );
1386
- r ++ ;
1387
- c ++ ;
1388
- }
1389
- * r = '\0' ;
1390
- return res ;
1391
- }
1392
- c ++ ;
1393
- }
1394
- return zend_string_copy (s );
1357
+ return zend_string_toupper (s );
1395
1358
}
1396
1359
/* }}} */
1397
1360
@@ -1404,56 +1367,22 @@ PHP_FUNCTION(strtoupper)
1404
1367
Z_PARAM_STR (arg )
1405
1368
ZEND_PARSE_PARAMETERS_END ();
1406
1369
1407
- RETURN_STR (php_string_toupper (arg ));
1370
+ RETURN_STR (zend_string_toupper (arg ));
1408
1371
}
1409
1372
/* }}} */
1410
1373
1411
1374
/* {{{ php_strtolower */
1412
1375
PHPAPI char * php_strtolower (char * s , size_t len )
1413
1376
{
1414
- unsigned char * c ;
1415
- const unsigned char * e ;
1416
-
1417
- c = (unsigned char * )s ;
1418
- e = c + len ;
1419
-
1420
- while (c < e ) {
1421
- * c = tolower (* c );
1422
- c ++ ;
1423
- }
1377
+ zend_str_tolower (s , len );
1424
1378
return s ;
1425
1379
}
1426
1380
/* }}} */
1427
1381
1428
1382
/* {{{ php_string_tolower */
1429
1383
PHPAPI zend_string * php_string_tolower (zend_string * s )
1430
1384
{
1431
- if (EXPECTED (!BG (ctype_string ))) {
1432
- return zend_string_tolower (s );
1433
- }
1434
-
1435
- unsigned char * c = (unsigned char * )ZSTR_VAL (s );
1436
- const unsigned char * e = c + ZSTR_LEN (s );
1437
- while (c < e ) {
1438
- if (isupper (* c )) {
1439
- unsigned char * r ;
1440
- zend_string * res = zend_string_alloc (ZSTR_LEN (s ), 0 );
1441
-
1442
- if (c != (unsigned char * )ZSTR_VAL (s )) {
1443
- memcpy (ZSTR_VAL (res ), ZSTR_VAL (s ), c - (unsigned char * )ZSTR_VAL (s ));
1444
- }
1445
- r = c + (ZSTR_VAL (res ) - ZSTR_VAL (s ));
1446
- while (c < e ) {
1447
- * r = tolower (* c );
1448
- r ++ ;
1449
- c ++ ;
1450
- }
1451
- * r = '\0' ;
1452
- return res ;
1453
- }
1454
- c ++ ;
1455
- }
1456
- return zend_string_copy (s );
1385
+ return zend_string_tolower (s );
1457
1386
}
1458
1387
/* }}} */
1459
1388
@@ -1466,7 +1395,7 @@ PHP_FUNCTION(strtolower)
1466
1395
Z_PARAM_STR (str )
1467
1396
ZEND_PARSE_PARAMETERS_END ();
1468
1397
1469
- RETURN_STR (php_string_tolower (str ));
1398
+ RETURN_STR (zend_string_tolower (str ));
1470
1399
}
1471
1400
/* }}} */
1472
1401
@@ -1758,8 +1687,8 @@ PHP_FUNCTION(pathinfo)
1758
1687
case insensitive strstr */
1759
1688
PHPAPI char * php_stristr (char * s , char * t , size_t s_len , size_t t_len )
1760
1689
{
1761
- php_strtolower (s , s_len );
1762
- php_strtolower (t , t_len );
1690
+ zend_str_tolower (s , s_len );
1691
+ zend_str_tolower (t , t_len );
1763
1692
return (char * )php_memnstr (s , t , t_len , s + s_len );
1764
1693
}
1765
1694
/* }}} */
@@ -1982,8 +1911,8 @@ PHP_FUNCTION(stripos)
1982
1911
RETURN_FALSE ;
1983
1912
}
1984
1913
1985
- haystack_dup = php_string_tolower (haystack );
1986
- needle_dup = php_string_tolower (needle );
1914
+ haystack_dup = zend_string_tolower (haystack );
1915
+ needle_dup = zend_string_tolower (needle );
1987
1916
found = (char * )php_memnstr (ZSTR_VAL (haystack_dup ) + offset ,
1988
1917
ZSTR_VAL (needle_dup ), ZSTR_LEN (needle_dup ), ZSTR_VAL (haystack_dup ) + ZSTR_LEN (haystack ));
1989
1918
@@ -2077,18 +2006,17 @@ PHP_FUNCTION(strripos)
2077
2006
}
2078
2007
e = ZSTR_VAL (haystack ) + (ZSTR_LEN (haystack ) + (size_t )offset );
2079
2008
}
2080
- /* Borrow that ord_needle buffer to avoid repeatedly tolower()ing needle */
2081
- lowered = tolower (* ZSTR_VAL (needle ));
2009
+ lowered = zend_tolower_ascii (* ZSTR_VAL (needle ));
2082
2010
while (e >= p ) {
2083
- if (tolower (* e ) == lowered ) {
2011
+ if (zend_tolower_ascii (* e ) == lowered ) {
2084
2012
RETURN_LONG (e - p + (offset > 0 ? offset : 0 ));
2085
2013
}
2086
2014
e -- ;
2087
2015
}
2088
2016
RETURN_FALSE ;
2089
2017
}
2090
2018
2091
- haystack_dup = php_string_tolower (haystack );
2019
+ haystack_dup = zend_string_tolower (haystack );
2092
2020
if (offset >= 0 ) {
2093
2021
if ((size_t )offset > ZSTR_LEN (haystack )) {
2094
2022
zend_string_release_ex (haystack_dup , 0 );
@@ -2112,7 +2040,7 @@ PHP_FUNCTION(strripos)
2112
2040
}
2113
2041
}
2114
2042
2115
- needle_dup = php_string_tolower (needle );
2043
+ needle_dup = zend_string_tolower (needle );
2116
2044
if ((found = (char * )zend_memnrstr (p , ZSTR_VAL (needle_dup ), ZSTR_LEN (needle_dup ), e ))) {
2117
2045
RETVAL_LONG (found - ZSTR_VAL (haystack_dup ));
2118
2046
zend_string_release_ex (needle_dup , 0 );
@@ -2647,7 +2575,7 @@ PHP_FUNCTION(chr)
2647
2575
static zend_string * php_ucfirst (zend_string * str )
2648
2576
{
2649
2577
const unsigned char ch = ZSTR_VAL (str )[0 ];
2650
- unsigned char r = toupper (ch );
2578
+ unsigned char r = zend_toupper_ascii (ch );
2651
2579
if (r == ch ) {
2652
2580
return zend_string_copy (str );
2653
2581
} else {
@@ -2679,7 +2607,7 @@ PHP_FUNCTION(ucfirst)
2679
2607
Lowercase the first character of the word in a native string */
2680
2608
static zend_string * php_lcfirst (zend_string * str )
2681
2609
{
2682
- unsigned char r = tolower (ZSTR_VAL (str )[0 ]);
2610
+ unsigned char r = zend_tolower_ascii (ZSTR_VAL (str )[0 ]);
2683
2611
if (r == ZSTR_VAL (str )[0 ]) {
2684
2612
return zend_string_copy (str );
2685
2613
} else {
@@ -2732,10 +2660,10 @@ PHP_FUNCTION(ucwords)
2732
2660
ZVAL_STRINGL (return_value , ZSTR_VAL (str ), ZSTR_LEN (str ));
2733
2661
r = Z_STRVAL_P (return_value );
2734
2662
2735
- * r = toupper ((unsigned char ) * r );
2663
+ * r = zend_toupper_ascii ((unsigned char ) * r );
2736
2664
for (r_end = r + Z_STRLEN_P (return_value ) - 1 ; r < r_end ; ) {
2737
2665
if (mask [(unsigned char )* r ++ ]) {
2738
- * r = toupper ((unsigned char ) * r );
2666
+ * r = zend_toupper_ascii ((unsigned char ) * r );
2739
2667
}
2740
2668
}
2741
2669
}
@@ -3067,11 +2995,11 @@ static zend_string* php_char_to_str_ex(zend_string *str, char from, char *to, si
3067
2995
if (case_sensitivity ) {
3068
2996
char_count = count_chars (ZSTR_VAL (str ), ZSTR_LEN (str ), from );
3069
2997
} else {
3070
- lc_from = tolower (from );
3071
2998
char_count = 0 ;
2999
+ lc_from = zend_tolower_ascii (from );
3072
3000
source_end = ZSTR_VAL (str ) + ZSTR_LEN (str );
3073
3001
for (source = ZSTR_VAL (str ); source < source_end ; source ++ ) {
3074
- if (tolower (* source ) == lc_from ) {
3002
+ if (zend_tolower_ascii (* source ) == lc_from ) {
3075
3003
char_count ++ ;
3076
3004
}
3077
3005
}
@@ -3111,7 +3039,7 @@ static zend_string* php_char_to_str_ex(zend_string *str, char from, char *to, si
3111
3039
} else {
3112
3040
source_end = ZSTR_VAL (str ) + ZSTR_LEN (str );
3113
3041
for (source = ZSTR_VAL (str ); source < source_end ; source ++ ) {
3114
- if (tolower (* source ) == lc_from ) {
3042
+ if (zend_tolower_ascii (* source ) == lc_from ) {
3115
3043
memcpy (target , to , to_len );
3116
3044
target += to_len ;
3117
3045
} else {
@@ -4345,7 +4273,7 @@ static zend_long php_str_replace_in_subject(
4345
4273
zend_long old_replace_count = replace_count ;
4346
4274
4347
4275
if (!lc_subject_str ) {
4348
- lc_subject_str = php_string_tolower (subject_str );
4276
+ lc_subject_str = zend_string_tolower (subject_str );
4349
4277
}
4350
4278
tmp_result = php_str_to_str_i_ex (subject_str , ZSTR_VAL (lc_subject_str ),
4351
4279
search_str , replace_value , replace_len , & replace_count );
@@ -4398,7 +4326,7 @@ static zend_long php_str_replace_in_subject(
4398
4326
ZSTR_VAL (search_str ), ZSTR_LEN (search_str ),
4399
4327
ZSTR_VAL (replace_str ), ZSTR_LEN (replace_str ), & replace_count ));
4400
4328
} else {
4401
- lc_subject_str = php_string_tolower (subject_str );
4329
+ lc_subject_str = zend_string_tolower (subject_str );
4402
4330
ZVAL_STR (result , php_str_to_str_i_ex (subject_str , ZSTR_VAL (lc_subject_str ),
4403
4331
search_str , ZSTR_VAL (replace_str ), ZSTR_LEN (replace_str ), & replace_count ));
4404
4332
zend_string_release_ex (lc_subject_str , 0 );
@@ -4941,7 +4869,7 @@ int php_tag_find(char *tag, size_t len, const char *set) {
4941
4869
4942
4870
n = norm ;
4943
4871
t = tag ;
4944
- c = tolower (* t );
4872
+ c = zend_tolower_ascii (* t );
4945
4873
/*
4946
4874
normalize the tag removing leading and trailing whitespace
4947
4875
and turn any <a whatever...> into just <a> and any </tag>
@@ -4969,7 +4897,7 @@ int php_tag_find(char *tag, size_t len, const char *set) {
4969
4897
}
4970
4898
break ;
4971
4899
}
4972
- c = tolower (* (++ t ));
4900
+ c = zend_tolower_ascii (* (++ t ));
4973
4901
}
4974
4902
* (n ++ ) = '>' ;
4975
4903
* n = '\0' ;
0 commit comments