]> granicus.if.org Git - php/commitdiff
- Fix problem where you couldn't define constants with different cases but
authorAndi Gutmans <andi@php.net>
Wed, 19 Jun 2002 04:13:12 +0000 (04:13 +0000)
committerAndi Gutmans <andi@php.net>
Wed, 19 Jun 2002 04:13:12 +0000 (04:13 +0000)
- the same name.

Zend/zend_constants.c

index 2874a24bf942f97c2d3c52cbf38aa66de59a5fe5..62469faf06526056b20e32ca9517663dffaa2dd7 100644 (file)
@@ -220,26 +220,27 @@ ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC
 {
        zend_constant *c;
        char *lookup_name;
-       int retval;
+       int retval = 1;
 
-       lookup_name = do_alloca(name_len+1);
-       memcpy(lookup_name, name, name_len+1);
+       if (zend_hash_find(EG(zend_constants), name, name_len+1, (void **) &c) == FAILURE) {
+               lookup_name = do_alloca(name_len+1);
+               memcpy(lookup_name, name, name_len+1);
+               zend_str_tolower(lookup_name, name_len);
 
-       zend_str_tolower(lookup_name, name_len);
-
-       if (zend_hash_find(EG(zend_constants), lookup_name, name_len+1, (void **) &c)==SUCCESS) {
-               if ((c->flags & CONST_CS) && memcmp(c->name, name, name_len)!=0) {
-                       retval=0;
+               if (zend_hash_find(EG(zend_constants), lookup_name, name_len+1, (void **) &c)==SUCCESS) {
+                       if ((c->flags & CONST_CS) && memcmp(c->name, name, name_len)!=0) {
+                               retval=0;
+                       }
                } else {
-                       retval=1;
-                       *result = c->value;
-                       zval_copy_ctor(result);
+                       retval=0;
                }
-       } else {
-               retval=0;
+               free_alloca(lookup_name);
        }
 
-       free_alloca(lookup_name);
+       if (retval) {
+               *result = c->value;
+               zval_copy_ctor(result);
+       }
 
        return retval;
 }
@@ -247,14 +248,21 @@ ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC
 
 ZEND_API int zend_register_constant(zend_constant *c TSRMLS_DC)
 {
-       char *lowercase_name = zend_strndup(c->name, c->name_len);
+       char *lowercase_name;
        int ret = SUCCESS;
 
 #if 0
        printf("Registering constant for module %d\n", c->module_number);
 #endif
 
-       zend_str_tolower(lowercase_name, c->name_len);
+       lowercase_name = do_alloca(c->name_len);
+
+       memcpy(lowercase_name, c->name, c->name_len);
+
+       if (!(c->flags & CONST_CS)) {
+               zend_str_tolower(lowercase_name, c->name_len);
+       }       
+
        if (zend_hash_add(EG(zend_constants), lowercase_name, c->name_len, (void *) c, sizeof(zend_constant), NULL)==FAILURE) {
                free(c->name);
                if (!(c->flags & CONST_PERSISTENT)
@@ -264,7 +272,7 @@ ZEND_API int zend_register_constant(zend_constant *c TSRMLS_DC)
                zend_error(E_NOTICE,"Constant %s already defined", lowercase_name);
                ret = FAILURE;
        }
-       free(lowercase_name);
+       free_alloca(lowercase_name);
        return ret;
 }