@- Make define return false and issue E_NOTICE when trying to redefine constant (Stas)
ZEND_WRONG_PARAM_COUNT();
break;
}
+
switch((*val)->type) {
case IS_LONG:
case IS_DOUBLE:
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;
+ }
}
}
-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);
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;
}
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);