@@ -2789,11 +2789,16 @@ PHP_FUNCTION(chr)
27892789
27902790/* {{{ php_ucfirst
27912791 Uppercase the first character of the word in a native string */
2792- static void php_ucfirst (char * str )
2792+ static zend_string * php_ucfirst (zend_string * str )
27932793{
2794- register char * r ;
2795- r = str ;
2796- * r = toupper ((unsigned char ) * r );
2794+ unsigned char r = toupper (ZSTR_VAL (str )[0 ]);
2795+ if (r == ZSTR_VAL (str )[0 ]) {
2796+ return zend_string_copy (str );
2797+ } else {
2798+ zend_string * s = zend_string_init (ZSTR_VAL (str ), ZSTR_LEN (str ), 0 );
2799+ ZSTR_VAL (s )[0 ] = r ;
2800+ return s ;
2801+ }
27972802}
27982803/* }}} */
27992804
@@ -2811,18 +2816,22 @@ PHP_FUNCTION(ucfirst)
28112816 RETURN_EMPTY_STRING ();
28122817 }
28132818
2814- ZVAL_STRINGL (return_value , ZSTR_VAL (str ), ZSTR_LEN (str ));
2815- php_ucfirst (Z_STRVAL_P (return_value ));
2819+ RETURN_STR (php_ucfirst (str ));
28162820}
28172821/* }}} */
28182822
28192823/* {{{
28202824 Lowercase the first character of the word in a native string */
2821- static void php_lcfirst (char * str )
2825+ static zend_string * php_lcfirst (zend_string * str )
28222826{
2823- register char * r ;
2824- r = str ;
2825- * r = tolower ((unsigned char ) * r );
2827+ unsigned char r = tolower (ZSTR_VAL (str )[0 ]);
2828+ if (r == ZSTR_VAL (str )[0 ]) {
2829+ return zend_string_copy (str );
2830+ } else {
2831+ zend_string * s = zend_string_init (ZSTR_VAL (str ), ZSTR_LEN (str ), 0 );
2832+ ZSTR_VAL (s )[0 ] = r ;
2833+ return s ;
2834+ }
28262835}
28272836/* }}} */
28282837
@@ -2840,8 +2849,7 @@ PHP_FUNCTION(lcfirst)
28402849 RETURN_EMPTY_STRING ();
28412850 }
28422851
2843- ZVAL_STRINGL (return_value , ZSTR_VAL (str ), ZSTR_LEN (str ));
2844- php_lcfirst (Z_STRVAL_P (return_value ));
2852+ RETURN_STR (php_lcfirst (str ));
28452853}
28462854/* }}} */
28472855
0 commit comments