diff options
author | Andi Gutmans <andi@php.net> | 2002-06-19 04:13:12 +0000 |
---|---|---|
committer | Andi Gutmans <andi@php.net> | 2002-06-19 04:13:12 +0000 |
commit | 70de1bd5bbd0bc0564d10def0e2905b2b61400fe (patch) | |
tree | e11420bd7b147becd81d18afd8f6647f755593e6 /Zend/zend_constants.c | |
parent | 5060a9b379fac39d382b2a395b539cc3c897929e (diff) | |
download | php-git-70de1bd5bbd0bc0564d10def0e2905b2b61400fe.tar.gz |
- Fix problem where you couldn't define constants with different cases but
- the same name.
Diffstat (limited to 'Zend/zend_constants.c')
-rw-r--r-- | Zend/zend_constants.c | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 2874a24bf9..62469faf06 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -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; } |