]> granicus.if.org Git - php/commitdiff
Make define return false and issue E_NOTICE when trying to redefine constant
authorStanislav Malyshev <stas@php.net>
Fri, 28 Jul 2000 09:44:46 +0000 (09:44 +0000)
committerStanislav Malyshev <stas@php.net>
Fri, 28 Jul 2000 09:44:46 +0000 (09:44 +0000)
@- Make define return false and issue E_NOTICE when trying to redefine constant (Stas)

Zend/zend_builtin_functions.c
Zend/zend_constants.c
Zend/zend_constants.h

index 2bfe2764e13dbb0c963c6b7527173bd26774403b..4efedd8b08896d62a125f5eea9834a8c08bdbdf0 100644 (file)
@@ -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;
+       }
 }
 
 
index 1f0395c6a89eaddd725f165529e137ff4f6bc3c0..c939f0e70ae0294e7fbbc97d8fe25be56a7d2f2f 100644 (file)
@@ -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;
 }
 
 
index 56f752f23638303975e4c5ca27cec6eb63e1ff10..6500441ac906c19617377224254516a14a63697e 100644 (file)
@@ -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);