summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2000-07-28 09:44:46 +0000
committerStanislav Malyshev <stas@php.net>2000-07-28 09:44:46 +0000
commit2c95b113bd1b58ff0796c4130c6c795cef0c6b91 (patch)
treeb02b14ed6af8c6065ff644e73f6652aad298c773
parent5c2c547d9e704bb5176141bb4ea995f2ae8eed2d (diff)
downloadphp-git-2c95b113bd1b58ff0796c4130c6c795cef0c6b91.tar.gz
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)
-rw-r--r--Zend/zend_builtin_functions.c8
-rw-r--r--Zend/zend_constants.c6
-rw-r--r--Zend/zend_constants.h2
3 files changed, 12 insertions, 4 deletions
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);