]> granicus.if.org Git - php/commitdiff
Make zend_str_tolower_copy() a copy function (like stccpy).
authorMarcus Boerger <helly@php.net>
Wed, 21 May 2003 21:59:40 +0000 (21:59 +0000)
committerMarcus Boerger <helly@php.net>
Wed, 21 May 2003 21:59:40 +0000 (21:59 +0000)
Supply a dup version (like estrdup).
Fix tolower() handling.
# Havin copy and dup allows to use the faster version even with
# memory not allocated by emalloc.

Zend/zend_API.c
Zend/zend_execute.c
Zend/zend_execute_API.c
Zend/zend_operators.c
Zend/zend_operators.h

index dff717fb3d3f4e75695f74b2e4c41cc2ee3da748..73313cdfed4edf42782d6fb1a1d1de1e89e6b293 100644 (file)
@@ -1541,7 +1541,7 @@ zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callabl
                        if (syntax_only)
                                return 1;
 
-                       lcname = zend_str_tolower_copy(Z_STRVAL_P(callable), Z_STRLEN_P(callable));
+                       lcname = zend_str_tolower_dup(Z_STRVAL_P(callable), Z_STRLEN_P(callable));
                        if (zend_hash_exists(EG(function_table), lcname, Z_STRLEN_P(callable)+1)) 
                                retval = 1;
                        efree(lcname);
@@ -1576,7 +1576,7 @@ zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callabl
                                                if (syntax_only)
                                                        return 1;
 
-                                               lcname = zend_str_tolower_copy(Z_STRVAL_PP(obj), Z_STRLEN_PP(obj));
+                                               lcname = zend_str_tolower_dup(Z_STRVAL_PP(obj), Z_STRLEN_PP(obj));
                                                if (zend_lookup_class(lcname, Z_STRLEN_PP(obj), &pce TSRMLS_CC) == SUCCESS) {
                                                        ce = *pce;
                                                }
@@ -1602,7 +1602,7 @@ zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callabl
                                        }
 
                                        if (ce) {
-                                               lcname = zend_str_tolower_copy(Z_STRVAL_PP(method), Z_STRLEN_PP(method));
+                                               lcname = zend_str_tolower_dup(Z_STRVAL_PP(method), Z_STRLEN_PP(method));
                                                if (zend_hash_exists(&ce->function_table, lcname, Z_STRLEN_PP(method)+1))
                                                        retval = 1;
                                                efree(lcname);
index ad38c9af270968735da6b7e4dee30eaa0adafa1c..97701d49b9d8a70e8dded1a16d8a207bba78271a 100644 (file)
@@ -2365,7 +2365,7 @@ int zend_fetch_class_handler(ZEND_OPCODE_HANDLER_ARGS)
                if (class_name->type == IS_OBJECT) {
                        ce = Z_OBJCE_P(class_name);
                } else {
-                       class_name_strval = zend_str_tolower_copy(class_name->value.str.val, class_name->value.str.len);
+                       class_name_strval = zend_str_tolower_dup(class_name->value.str.val, class_name->value.str.len);
                        class_name_strlen = class_name->value.str.len;
                }
        }
@@ -2518,7 +2518,7 @@ int zend_init_static_method_call_handler(ZEND_OPCODE_HANDLER_ARGS)
        } else {
                function_name = get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R);
 
-               function_name_strval = zend_str_tolower_copy(function_name->value.str.val, function_name->value.str.len);
+               function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
                function_name_strlen = function_name->value.str.len;
        }
 
@@ -2566,7 +2566,7 @@ int zend_init_fcall_by_name_handler(ZEND_OPCODE_HANDLER_ARGS)
        } else {
                function_name = get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R);
 
-               function_name_strval = zend_str_tolower_copy(function_name->value.str.val, function_name->value.str.len);
+               function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
                function_name_strlen = function_name->value.str.len;
        }
        
index 3d04fe7747c2b10f195cd000a649c050192ff575..3a001eee1cddf9b31673b16f5ef9fd25566efc2e 100644 (file)
@@ -595,7 +595,7 @@ int fast_call_user_function(HashTable *function_table, zval **object_pp, zval *f
                                char *lc_class;
                                int found;
 
-                               lc_class = zend_str_tolower_copy(Z_STRVAL_PP(object_pp), Z_STRLEN_PP(object_pp));
+                               lc_class = zend_str_tolower_dup(Z_STRVAL_PP(object_pp), Z_STRLEN_PP(object_pp));
                                found = zend_lookup_class(lc_class, Z_STRLEN_PP(object_pp), &ce TSRMLS_CC);
                                efree(lc_class);
                                if (found == FAILURE)
@@ -612,7 +612,7 @@ int fast_call_user_function(HashTable *function_table, zval **object_pp, zval *f
                        return FAILURE;
                }
 
-               function_name_lc = zend_str_tolower_copy(function_name->value.str.val, function_name->value.str.len);
+               function_name_lc = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
 
                original_function_state_ptr = EG(function_state_ptr);
                if (zend_hash_find(function_table, function_name_lc, function_name->value.str.len+1, (void **) &EX(function_state).function)==FAILURE) {
index f89d119fc58d5f26afd2c21b6185f6e1210eb392..65ce8fcf47723c6945f22f93af44f02ac6ce4a7b 100644 (file)
@@ -1581,30 +1581,27 @@ ZEND_API int zval_is_true(zval *op)
        return (op->value.lval ? 1 : 0);
 }
 
-ZEND_API char *zend_str_tolower_copy(char *p, unsigned int length)
+ZEND_API char *zend_str_tolower_copy(char *source, char *dest, unsigned int length)
 {
-       register char *result;
-       register char *end = p + length;
-       char *start;
+       register unsigned char *str = (unsigned char*)source;
+       register unsigned char *result = dest;
+       register unsigned char *end = str + length;
 
-       result = emalloc(length+1);
-       start = result;
-
-       while (p < end) {
-               *result++ = tolower(*p++);
+       while (str < end) {
+               *result++ = tolower((int)*str++);
        }
        *result = *end;
 
-       return start;
+       return dest;
 }
        
 ZEND_API void zend_str_tolower(char *str, unsigned int length)
 {
-       register char *p=str;
-       register char *end = str + length;
+       register unsigned char *p = (unsigned char*)str;
+       register unsigned char *end = p + length;
 
        while (p < end) {
-               *p = tolower(*p);
+               *p = tolower((int)*p);
                p++;
        }
 }
index 368426e952b2f175f5071ce4073c70fba82beed0..28c1c2a36df3294c56ce9e6c177c472b589f7e23 100644 (file)
@@ -197,7 +197,14 @@ ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_
 ZEND_API int string_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
 
 ZEND_API void zend_str_tolower(char *str, unsigned int length);
-ZEND_API char *zend_str_tolower_copy(char *str, unsigned int length);
+ZEND_API char *zend_str_tolower_copy(char *source, char *dest, unsigned int length);
+
+static inline char *
+zend_str_tolower_dup(char *source, unsigned int length)
+{
+       return zend_str_tolower_copy(source, emalloc(length+1), length);
+}
+
 ZEND_API int zend_binary_zval_strcmp(zval *s1, zval *s2);
 ZEND_API int zend_binary_zval_strncmp(zval *s1, zval *s2, zval *s3);
 ZEND_API int zend_binary_zval_strcasecmp(zval *s1, zval *s2);