- Provide appropriate way to destroy internal zval's.

- Allow internal zval's of type string and disallow complex types.
- Define the default string for extensions at class level instead of ctor.
This commit is contained in:
Marcus Boerger 2003-08-24 17:32:47 +00:00
parent cec053f707
commit 19ec7a09fc
8 changed files with 93 additions and 21 deletions

View file

@ -80,6 +80,32 @@ ZEND_API void _zval_dtor(zval *zvalue ZEND_FILE_LINE_DC)
}
ZEND_API void _zval_internal_dtor(zval *zvalue ZEND_FILE_LINE_DC)
{
switch (zvalue->type & ~IS_CONSTANT_INDEX) {
case IS_STRING:
case IS_CONSTANT:
CHECK_ZVAL_STRING_REL(zvalue);
if (zvalue->value.str.val != empty_string) {
free(zvalue->value.str.val);
}
break;
case IS_ARRAY:
case IS_CONSTANT_ARRAY:
case IS_OBJECT:
case IS_RESOURCE:
zend_error(E_CORE_ERROR, "Internal zval's can't be arrays, objects or resources");
break;
case IS_LONG:
case IS_DOUBLE:
case IS_BOOL:
case IS_NULL:
default:
break;
}
}
ZEND_API void zval_add_ref(zval **p)
{
(*p)->refcount++;
@ -159,11 +185,22 @@ ZEND_API void _zval_dtor_wrapper(zval *zvalue)
}
ZEND_API void _zval_internal_dtor_wrapper(zval *zvalue)
{
zval_internal_dtor(zvalue);
}
ZEND_API void _zval_ptr_dtor_wrapper(zval **zval_ptr)
{
zval_ptr_dtor(zval_ptr);
}
ZEND_API void _zval_internal_ptr_dtor_wrapper(zval **zval_ptr)
{
zval_internal_ptr_dtor(zval_ptr);
}
#endif
/*