From: Stanislav Malyshev Date: Fri, 28 Jul 2000 09:44:46 +0000 (+0000) Subject: Make define return false and issue E_NOTICE when trying to redefine constant X-Git-Tag: PRE_FILE_COMPILE_API_CHANGE~98 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2c95b113bd1b58ff0796c4130c6c795cef0c6b91;p=php Make define return false and issue E_NOTICE when trying to redefine constant @- Make define return false and issue E_NOTICE when trying to redefine constant (Stas) --- diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 2bfe2764e1..4efedd8b08 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -394,6 +394,7 @@ ZEND_FUNCTION(define) ZEND_WRONG_PARAM_COUNT(); break; } + switch((*val)->type) { case IS_LONG: case IS_DOUBLE: @@ -414,8 +415,11 @@ ZEND_FUNCTION(define) c.flags = case_sensitive; /* non persistent */ c.name = zend_strndup((*var)->value.str.val, (*var)->value.str.len); c.name_len = (*var)->value.str.len+1; - zend_register_constant(&c ELS_CC); - RETURN_TRUE; + if(zend_register_constant(&c ELS_CC) == SUCCESS) { + RETURN_TRUE; + } else { + RETURN_FALSE; + } } diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 1f0395c6a8..c939f0e70a 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -239,9 +239,10 @@ ZEND_API int zend_get_constant(char *name, uint name_len, zval *result) } -ZEND_API void zend_register_constant(zend_constant *c ELS_DC) +ZEND_API int zend_register_constant(zend_constant *c ELS_DC) { char *lowercase_name = zend_strndup(c->name, c->name_len); + int ret = SUCCESS; #if 0 printf("Registering constant for module %d\n",c->module_number); @@ -250,8 +251,11 @@ ZEND_API void zend_register_constant(zend_constant *c ELS_DC) 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) { zval_dtor(&c->value); + zend_error(E_NOTICE,"Constant %s already defined",lowercase_name); + ret = FAILURE; } free(lowercase_name); + return ret; } diff --git a/Zend/zend_constants.h b/Zend/zend_constants.h index 56f752f236..6500441ac9 100644 --- a/Zend/zend_constants.h +++ b/Zend/zend_constants.h @@ -55,7 +55,7 @@ ZEND_API void zend_register_long_constant(char *name, uint name_len, long lval, ZEND_API void zend_register_double_constant(char *name, uint name_len, double dval, int flags, int module_number ELS_DC); ZEND_API void zend_register_string_constant(char *name, uint name_len, char *strval, int flags, int module_number ELS_DC); ZEND_API void zend_register_stringl_constant(char *name, uint name_len, char *strval, uint strlen, int flags, int module_number ELS_DC); -ZEND_API void zend_register_constant(zend_constant *c ELS_DC); +ZEND_API int zend_register_constant(zend_constant *c ELS_DC); void zend_copy_constants(HashTable *target, HashTable *sourc); void copy_zend_constant(zend_constant *c);