summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald Radi <phanto@php.net>2001-07-29 22:37:42 +0000
committerHarald Radi <phanto@php.net>2001-07-29 22:37:42 +0000
commitf05328fdd664abc013c73c057579fa0e3912e5d8 (patch)
tree0a205e69fc16147e2966ba57900a5ada4fad348c
parente27b13af238beb554b912e9fc48f54053ec9911d (diff)
downloadphp-git-f05328fdd664abc013c73c057579fa0e3912e5d8.tar.gz
- MFH and another set of memory fixes
- there were lots of changes in the zend core and now the heap corruptions disapeared as inconspicuous as they appeared. maybe they were not our fault.
-rw-r--r--ext/com/COM.c57
-rw-r--r--ext/com/VARIANT.c26
-rw-r--r--ext/com/com.h18
-rw-r--r--ext/com/conversion.c10
-rw-r--r--ext/rpc/com/com_wrapper.c57
-rw-r--r--ext/rpc/com/com_wrapper.h18
-rw-r--r--ext/rpc/com/conversion.c10
-rw-r--r--ext/rpc/com/variant.c26
8 files changed, 118 insertions, 104 deletions
diff --git a/ext/com/COM.c b/ext/com/COM.c
index 7c2e761cc0..ab3ea4e8c3 100644
--- a/ext/com/COM.c
+++ b/ext/com/COM.c
@@ -378,8 +378,7 @@ static PHP_INI_MH(OnTypelibFileChange)
char *typelib_name_buffer;
char *strtok_buf = NULL;
int interactive;
-
- CLS_FETCH();
+ TSRMLS_FETCH();
interactive = CG(interactive);
if(!new_value || (typelib_file = VCWD_FOPEN(new_value, "r"))==NULL)
@@ -437,7 +436,7 @@ static PHP_INI_MH(OnTypelibFileChange)
{
printf("\rLoading %-60s\r", typelib_name);
}
-
+
if((pTL = php_COM_find_typelib(typelib_name, mode)) != NULL)
{
php_COM_load_typelib(pTL, mode);
@@ -953,7 +952,6 @@ static int do_COM_offget(VARIANT *result, comval *array, pval *property, int cle
if(cleanup)
{
php_COM_destruct(array);
- efree(array);
}
return retval;
@@ -1113,7 +1111,7 @@ PHP_FUNCTION(com_propget)
ALLOC_VARIANT(var_result);
- if(do_COM_propget(var_result, obj, arg_property, 0)==FAILURE)
+ if(do_COM_propget(var_result, obj, arg_property, FALSE) == FAILURE)
{
FREE_VARIANT(var_result);
RETURN_FALSE;
@@ -1206,7 +1204,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
ZVAL_NULL(&return_value);
/* fetch the IDispatch interface */
- zend_hash_index_find(object->value.obj.properties, 0, (void **) &comval_handle);
+ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle);
obj = (comval *) zend_list_find(Z_LVAL_P(*comval_handle), &type);
if(!obj || (type != IS_COM))
{
@@ -1225,7 +1223,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
if(do_COM_offget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE)
{
FREE_VARIANT(var_result);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return return_value;
}
@@ -1235,7 +1233,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
if(do_COM_propget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE)
{
FREE_VARIANT(var_result);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return return_value;
}
@@ -1243,15 +1241,18 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
case OE_IS_METHOD:
{
+ FREE_VARIANT(var_result);
if(obj != obj_prop)
{
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return_value = *object;
ZVAL_ADDREF(&return_value);
}
- FREE_VARIANT(var_result);
-
+ else
+ {
+ RETVAL_COM(obj);
+ }
return return_value;
}
break;
@@ -1262,21 +1263,19 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
if(V_DISPATCH(var_result) == NULL)
{
FREE_VARIANT(var_result);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return return_value;
}
obj = obj_prop;
php_COM_set(obj, &V_DISPATCH(var_result), TRUE);
-
- RETVAL_COM(obj);
}
else
{
php_variant_to_pval(var_result, &return_value, FALSE, codepage);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
obj_prop = NULL;
}
@@ -1302,7 +1301,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
/* fetch the IDispatch interface */
- zend_hash_index_find(object->value.obj.properties, 0, (void **) &comval_handle);
+ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle);
obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type);
if(!obj || (type != IS_COM))
{
@@ -1321,7 +1320,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
if(do_COM_offget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE)
{
FREE_VARIANT(var_result);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return FAILURE;
}
@@ -1331,7 +1330,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
if(do_COM_propget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE)
{
FREE_VARIANT(var_result);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return FAILURE;
}
@@ -1348,7 +1347,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
if(V_DISPATCH(var_result) == NULL)
{
FREE_VARIANT(var_result);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return FAILURE;
}
@@ -1358,7 +1357,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
}
else
{
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
FREE_VARIANT(var_result);
return FAILURE;
@@ -1371,7 +1370,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
overloaded_property = (zend_overloaded_element *) element->data;
do_COM_propput(&result, obj, &overloaded_property->element, value);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
pval_destructor(&overloaded_property->element);
@@ -1401,7 +1400,7 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro
*object_handle = *return_value;
pval_copy_constructor(object_handle);
INIT_PZVAL(object_handle);
- zend_hash_index_update(object->value.obj.properties, 0, &object_handle, sizeof(pval *), NULL);
+ zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL);
pval_destructor(&function_name->element);
return;
@@ -1417,8 +1416,8 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro
pval_destructor(&function_name->element);
return;
}
- zend_hash_index_find(property.value.obj.properties, 0, (void **) &handle);
- obj = (comval *)zend_list_find((*handle)->value.lval,&type);
+ zend_hash_index_find(Z_OBJPROP(property), 0, (void **) &handle);
+ obj = (comval *)zend_list_find(Z_LVAL_PP(handle), &type);
if(!obj || (type != IS_COM))
{
@@ -1450,8 +1449,6 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro
if(do_COM_invoke(obj , &function_name->element, var_result, arguments, arg_count) == FAILURE)
{
- FREE_VARIANT(var_result);
-
RETVAL_FALSE;
}
else
@@ -1660,7 +1657,7 @@ static int php_COM_load_typelib(ITypeLib *TypeLib, int mode)
ITypeComp *TypeComp;
int i;
int interfaces;
- ELS_FETCH();
+ TSRMLS_FETCH();
if(NULL == TypeLib)
{
@@ -1729,7 +1726,7 @@ static int php_COM_load_typelib(ITypeLib *TypeLib, int mode)
/* Before registering the contsnt, let's see if we can find it */
{
- zend_register_constant(&c ELS_CC);
+ zend_register_constant(&c TSRMLS_CC);
}
j++;
}
@@ -1757,8 +1754,8 @@ PHP_FUNCTION(com_isenum)
getParameters(ht, 1, &object);
/* obtain IDispatch interface */
- zend_hash_index_find(object->value.obj.properties, 0, (void **) &comval_handle);
- obj = (comval *) zend_list_find((*comval_handle)->value.lval, &type);
+ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle);
+ obj = (comval *) zend_list_find(Z_LVAL_PP(comval_handle), &type);
if(!obj || (type != IS_COM))
{
php_error(E_WARNING,"%s is not a COM object handler", "");
diff --git a/ext/com/VARIANT.c b/ext/com/VARIANT.c
index 49a7335ca0..fc04752f6c 100644
--- a/ext/com/VARIANT.c
+++ b/ext/com/VARIANT.c
@@ -98,10 +98,18 @@ PHP_MINIT_FUNCTION(VARIANT)
REGISTER_LONG_CONSTANT("CP_ACP", CP_ACP, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("CP_MACCP", CP_MACCP, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("CP_OEMCP", CP_OEMCP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CP_SYMBOL", CP_SYMBOL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CP_THREAD_ACP", CP_THREAD_ACP, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("CP_UTF7", CP_UTF7, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("CP_UTF8", CP_UTF8, CONST_CS | CONST_PERSISTENT);
+#ifdef CP_SYMBOL
+ REGISTER_LONG_CONSTANT("CP_SYMBOL", CP_SYMBOL, CONST_CS | CONST_PERSISTENT);
+#else
+# error "CP_SYMBOL undefined"
+#endif
+#ifdef CP_THREAD_ACP
+ REGISTER_LONG_CONSTANT("CP_THREAD_ACP", CP_THREAD_ACP, CONST_CS | CONST_PERSISTENT);
+#else
+# error "CP_THREAD_ACP undefined"
+#endif
php_register_VARIANT_class();
return SUCCESS;
@@ -169,8 +177,8 @@ void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_proper
*object_handle = *return_value;
pval_copy_constructor(object_handle);
INIT_PZVAL(object_handle);
- zend_hash_index_update(object->value.obj.properties, 0, &object_handle, sizeof(pval *), NULL);
- pval_destructor(&function_name->element);
+ zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL);
+ zval_dtor(&function_name->element);
}
}
@@ -184,7 +192,7 @@ pval php_VARIANT_get_property_handler(zend_property_reference *property_referenc
VARIANT *var_arg;
/* fetch the VARIANT structure */
- zend_hash_index_find(object->value.obj.properties, 0, (void **) &var_handle);
+ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle);
var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type);
if(!var_arg || (type != IS_VARIANT))
@@ -220,7 +228,7 @@ pval php_VARIANT_get_property_handler(zend_property_reference *property_referenc
php_error(E_WARNING, "Unknown method.");
break;
- pval_destructor(&overloaded_property->element);
+ zval_dtor(&overloaded_property->element);
}
}
@@ -236,7 +244,7 @@ int php_VARIANT_set_property_handler(zend_property_reference *property_reference
VARIANT *var_arg;
/* fetch the VARIANT structure */
- zend_hash_index_find(object->value.obj.properties, 0, (void **) &var_handle);
+ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle);
var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type);
if(!var_arg || (type != IS_VARIANT))
@@ -244,7 +252,7 @@ int php_VARIANT_set_property_handler(zend_property_reference *property_reference
overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data;
do_VARIANT_propset(var_arg, &overloaded_property->element, value);
- pval_destructor(&overloaded_property->element);
+ zval_dtor(&overloaded_property->element);
return SUCCESS;
}
@@ -423,7 +431,7 @@ static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value)
static void php_variant_destructor(zend_rsrc_list_entry *rsrc)
{
- efree(rsrc);
+ FREE_VARIANT(rsrc->ptr);
}
void php_register_VARIANT_class()
diff --git a/ext/com/com.h b/ext/com/com.h
index a4e0a604fd..700526c11f 100644
--- a/ext/com/com.h
+++ b/ext/com/com.h
@@ -20,30 +20,32 @@ typedef struct comval_ {
} comval;
#define ZVAL_COM(z,o) { \
- pval *handle; \
+ zval *handle; \
\
+ /* OBJECTS_FIXME */ \
Z_TYPE_P(z) = IS_OBJECT; \
- (z)->value.obj.ce = &com_class_entry; \
+ Z_OBJCE_P(z) = &com_class_entry; \
\
- ALLOC_HASHTABLE((z)->value.obj.properties); \
- zend_hash_init((z)->value.obj.properties, 0, NULL, ZVAL_PTR_DTOR, 0); \
+ ALLOC_HASHTABLE(Z_OBJPROP_P(z)); \
+ zend_hash_init(Z_OBJPROP_P(z), 0, NULL, ZVAL_PTR_DTOR, 0); \
\
ALLOC_ZVAL(handle); \
INIT_PZVAL(handle); \
ZVAL_LONG(handle, zend_list_insert((o), IS_COM)); \
\
- pval_copy_constructor(handle); \
- zend_hash_index_update((z)->value.obj.properties, 0, \
- &handle, sizeof(pval *), NULL); \
+ zval_copy_ctor(handle); \
+ zend_hash_index_update(Z_OBJPROP_P(z), 0, &handle, sizeof(zval *), NULL); \
}
-#define RETVAL_COM(o) ZVAL_COM(&return_value, o)
+#define RETVAL_COM(o) ZVAL_COM(&return_value, o);
#define RETURN_COM(o) RETVAL_COM(o) \
return;
#define ALLOC_COM(z) (z) = (comval *) emalloc(sizeof(comval)); \
C_REFCOUNT(z) = 0;
+#define FREE_COM(z) efree(z);
+
#define IS_COM php_COM_get_le_comval()
#define C_HASTLIB(x) ((x)->typelib)
diff --git a/ext/com/conversion.c b/ext/com/conversion.c
index 11fbd8a28f..31644e9a3c 100644
--- a/ext/com/conversion.c
+++ b/ext/com/conversion.c
@@ -62,11 +62,11 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage)
break;
case IS_OBJECT:
- if(!strcmp(pval_arg->value.obj.ce->name, "VARIANT"))
+ if(!strcmp(Z_OBJCE_P(pval_arg)->name, "VARIANT"))
{
- type = VT_VARIANT;
+ type = VT_VARIANT|VT_BYREF;
}
- else if(!strcmp(pval_arg->value.obj.ce->name, "COM"))
+ else if(!strcmp(Z_OBJCE_P(pval_arg)->name, "COM"))
{
type = VT_DISPATCH;
}
@@ -386,7 +386,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c
pval **var_handle;
/* fetch the VARIANT structure */
- zend_hash_index_find(pval_arg->value.obj.properties, 0, (void **) &var_handle);
+ zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &var_handle);
V_VT(var_arg) = VT_VARIANT|VT_BYREF;
V_VARIANTREF(var_arg) = (VARIANT FAR*) zend_list_find(Z_LVAL_P(*var_handle), &tp);
@@ -895,7 +895,7 @@ static void comval_to_variant(pval *pval_arg, VARIANT *var_arg)
int type;
/* fetch the comval structure */
- zend_hash_index_find(pval_arg->value.obj.properties, 0, (void **) &comval_handle);
+ zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &comval_handle);
obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type);
if(!obj || (type != IS_COM) || !C_ISREFD(obj))
{
diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c
index 7c2e761cc0..ab3ea4e8c3 100644
--- a/ext/rpc/com/com_wrapper.c
+++ b/ext/rpc/com/com_wrapper.c
@@ -378,8 +378,7 @@ static PHP_INI_MH(OnTypelibFileChange)
char *typelib_name_buffer;
char *strtok_buf = NULL;
int interactive;
-
- CLS_FETCH();
+ TSRMLS_FETCH();
interactive = CG(interactive);
if(!new_value || (typelib_file = VCWD_FOPEN(new_value, "r"))==NULL)
@@ -437,7 +436,7 @@ static PHP_INI_MH(OnTypelibFileChange)
{
printf("\rLoading %-60s\r", typelib_name);
}
-
+
if((pTL = php_COM_find_typelib(typelib_name, mode)) != NULL)
{
php_COM_load_typelib(pTL, mode);
@@ -953,7 +952,6 @@ static int do_COM_offget(VARIANT *result, comval *array, pval *property, int cle
if(cleanup)
{
php_COM_destruct(array);
- efree(array);
}
return retval;
@@ -1113,7 +1111,7 @@ PHP_FUNCTION(com_propget)
ALLOC_VARIANT(var_result);
- if(do_COM_propget(var_result, obj, arg_property, 0)==FAILURE)
+ if(do_COM_propget(var_result, obj, arg_property, FALSE) == FAILURE)
{
FREE_VARIANT(var_result);
RETURN_FALSE;
@@ -1206,7 +1204,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
ZVAL_NULL(&return_value);
/* fetch the IDispatch interface */
- zend_hash_index_find(object->value.obj.properties, 0, (void **) &comval_handle);
+ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle);
obj = (comval *) zend_list_find(Z_LVAL_P(*comval_handle), &type);
if(!obj || (type != IS_COM))
{
@@ -1225,7 +1223,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
if(do_COM_offget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE)
{
FREE_VARIANT(var_result);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return return_value;
}
@@ -1235,7 +1233,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
if(do_COM_propget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE)
{
FREE_VARIANT(var_result);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return return_value;
}
@@ -1243,15 +1241,18 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
case OE_IS_METHOD:
{
+ FREE_VARIANT(var_result);
if(obj != obj_prop)
{
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return_value = *object;
ZVAL_ADDREF(&return_value);
}
- FREE_VARIANT(var_result);
-
+ else
+ {
+ RETVAL_COM(obj);
+ }
return return_value;
}
break;
@@ -1262,21 +1263,19 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
if(V_DISPATCH(var_result) == NULL)
{
FREE_VARIANT(var_result);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return return_value;
}
obj = obj_prop;
php_COM_set(obj, &V_DISPATCH(var_result), TRUE);
-
- RETVAL_COM(obj);
}
else
{
php_variant_to_pval(var_result, &return_value, FALSE, codepage);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
obj_prop = NULL;
}
@@ -1302,7 +1301,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
/* fetch the IDispatch interface */
- zend_hash_index_find(object->value.obj.properties, 0, (void **) &comval_handle);
+ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle);
obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type);
if(!obj || (type != IS_COM))
{
@@ -1321,7 +1320,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
if(do_COM_offget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE)
{
FREE_VARIANT(var_result);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return FAILURE;
}
@@ -1331,7 +1330,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
if(do_COM_propget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE)
{
FREE_VARIANT(var_result);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return FAILURE;
}
@@ -1348,7 +1347,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
if(V_DISPATCH(var_result) == NULL)
{
FREE_VARIANT(var_result);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
return FAILURE;
}
@@ -1358,7 +1357,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
}
else
{
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
FREE_VARIANT(var_result);
return FAILURE;
@@ -1371,7 +1370,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
overloaded_property = (zend_overloaded_element *) element->data;
do_COM_propput(&result, obj, &overloaded_property->element, value);
- php_COM_destruct(obj_prop);
+ FREE_COM(obj_prop);
pval_destructor(&overloaded_property->element);
@@ -1401,7 +1400,7 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro
*object_handle = *return_value;
pval_copy_constructor(object_handle);
INIT_PZVAL(object_handle);
- zend_hash_index_update(object->value.obj.properties, 0, &object_handle, sizeof(pval *), NULL);
+ zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL);
pval_destructor(&function_name->element);
return;
@@ -1417,8 +1416,8 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro
pval_destructor(&function_name->element);
return;
}
- zend_hash_index_find(property.value.obj.properties, 0, (void **) &handle);
- obj = (comval *)zend_list_find((*handle)->value.lval,&type);
+ zend_hash_index_find(Z_OBJPROP(property), 0, (void **) &handle);
+ obj = (comval *)zend_list_find(Z_LVAL_PP(handle), &type);
if(!obj || (type != IS_COM))
{
@@ -1450,8 +1449,6 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro
if(do_COM_invoke(obj , &function_name->element, var_result, arguments, arg_count) == FAILURE)
{
- FREE_VARIANT(var_result);
-
RETVAL_FALSE;
}
else
@@ -1660,7 +1657,7 @@ static int php_COM_load_typelib(ITypeLib *TypeLib, int mode)
ITypeComp *TypeComp;
int i;
int interfaces;
- ELS_FETCH();
+ TSRMLS_FETCH();
if(NULL == TypeLib)
{
@@ -1729,7 +1726,7 @@ static int php_COM_load_typelib(ITypeLib *TypeLib, int mode)
/* Before registering the contsnt, let's see if we can find it */
{
- zend_register_constant(&c ELS_CC);
+ zend_register_constant(&c TSRMLS_CC);
}
j++;
}
@@ -1757,8 +1754,8 @@ PHP_FUNCTION(com_isenum)
getParameters(ht, 1, &object);
/* obtain IDispatch interface */
- zend_hash_index_find(object->value.obj.properties, 0, (void **) &comval_handle);
- obj = (comval *) zend_list_find((*comval_handle)->value.lval, &type);
+ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle);
+ obj = (comval *) zend_list_find(Z_LVAL_PP(comval_handle), &type);
if(!obj || (type != IS_COM))
{
php_error(E_WARNING,"%s is not a COM object handler", "");
diff --git a/ext/rpc/com/com_wrapper.h b/ext/rpc/com/com_wrapper.h
index a4e0a604fd..700526c11f 100644
--- a/ext/rpc/com/com_wrapper.h
+++ b/ext/rpc/com/com_wrapper.h
@@ -20,30 +20,32 @@ typedef struct comval_ {
} comval;
#define ZVAL_COM(z,o) { \
- pval *handle; \
+ zval *handle; \
\
+ /* OBJECTS_FIXME */ \
Z_TYPE_P(z) = IS_OBJECT; \
- (z)->value.obj.ce = &com_class_entry; \
+ Z_OBJCE_P(z) = &com_class_entry; \
\
- ALLOC_HASHTABLE((z)->value.obj.properties); \
- zend_hash_init((z)->value.obj.properties, 0, NULL, ZVAL_PTR_DTOR, 0); \
+ ALLOC_HASHTABLE(Z_OBJPROP_P(z)); \
+ zend_hash_init(Z_OBJPROP_P(z), 0, NULL, ZVAL_PTR_DTOR, 0); \
\
ALLOC_ZVAL(handle); \
INIT_PZVAL(handle); \
ZVAL_LONG(handle, zend_list_insert((o), IS_COM)); \
\
- pval_copy_constructor(handle); \
- zend_hash_index_update((z)->value.obj.properties, 0, \
- &handle, sizeof(pval *), NULL); \
+ zval_copy_ctor(handle); \
+ zend_hash_index_update(Z_OBJPROP_P(z), 0, &handle, sizeof(zval *), NULL); \
}
-#define RETVAL_COM(o) ZVAL_COM(&return_value, o)
+#define RETVAL_COM(o) ZVAL_COM(&return_value, o);
#define RETURN_COM(o) RETVAL_COM(o) \
return;
#define ALLOC_COM(z) (z) = (comval *) emalloc(sizeof(comval)); \
C_REFCOUNT(z) = 0;
+#define FREE_COM(z) efree(z);
+
#define IS_COM php_COM_get_le_comval()
#define C_HASTLIB(x) ((x)->typelib)
diff --git a/ext/rpc/com/conversion.c b/ext/rpc/com/conversion.c
index 11fbd8a28f..31644e9a3c 100644
--- a/ext/rpc/com/conversion.c
+++ b/ext/rpc/com/conversion.c
@@ -62,11 +62,11 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage)
break;
case IS_OBJECT:
- if(!strcmp(pval_arg->value.obj.ce->name, "VARIANT"))
+ if(!strcmp(Z_OBJCE_P(pval_arg)->name, "VARIANT"))
{
- type = VT_VARIANT;
+ type = VT_VARIANT|VT_BYREF;
}
- else if(!strcmp(pval_arg->value.obj.ce->name, "COM"))
+ else if(!strcmp(Z_OBJCE_P(pval_arg)->name, "COM"))
{
type = VT_DISPATCH;
}
@@ -386,7 +386,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c
pval **var_handle;
/* fetch the VARIANT structure */
- zend_hash_index_find(pval_arg->value.obj.properties, 0, (void **) &var_handle);
+ zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &var_handle);
V_VT(var_arg) = VT_VARIANT|VT_BYREF;
V_VARIANTREF(var_arg) = (VARIANT FAR*) zend_list_find(Z_LVAL_P(*var_handle), &tp);
@@ -895,7 +895,7 @@ static void comval_to_variant(pval *pval_arg, VARIANT *var_arg)
int type;
/* fetch the comval structure */
- zend_hash_index_find(pval_arg->value.obj.properties, 0, (void **) &comval_handle);
+ zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &comval_handle);
obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type);
if(!obj || (type != IS_COM) || !C_ISREFD(obj))
{
diff --git a/ext/rpc/com/variant.c b/ext/rpc/com/variant.c
index 49a7335ca0..fc04752f6c 100644
--- a/ext/rpc/com/variant.c
+++ b/ext/rpc/com/variant.c
@@ -98,10 +98,18 @@ PHP_MINIT_FUNCTION(VARIANT)
REGISTER_LONG_CONSTANT("CP_ACP", CP_ACP, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("CP_MACCP", CP_MACCP, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("CP_OEMCP", CP_OEMCP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CP_SYMBOL", CP_SYMBOL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CP_THREAD_ACP", CP_THREAD_ACP, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("CP_UTF7", CP_UTF7, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("CP_UTF8", CP_UTF8, CONST_CS | CONST_PERSISTENT);
+#ifdef CP_SYMBOL
+ REGISTER_LONG_CONSTANT("CP_SYMBOL", CP_SYMBOL, CONST_CS | CONST_PERSISTENT);
+#else
+# error "CP_SYMBOL undefined"
+#endif
+#ifdef CP_THREAD_ACP
+ REGISTER_LONG_CONSTANT("CP_THREAD_ACP", CP_THREAD_ACP, CONST_CS | CONST_PERSISTENT);
+#else
+# error "CP_THREAD_ACP undefined"
+#endif
php_register_VARIANT_class();
return SUCCESS;
@@ -169,8 +177,8 @@ void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_proper
*object_handle = *return_value;
pval_copy_constructor(object_handle);
INIT_PZVAL(object_handle);
- zend_hash_index_update(object->value.obj.properties, 0, &object_handle, sizeof(pval *), NULL);
- pval_destructor(&function_name->element);
+ zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL);
+ zval_dtor(&function_name->element);
}
}
@@ -184,7 +192,7 @@ pval php_VARIANT_get_property_handler(zend_property_reference *property_referenc
VARIANT *var_arg;
/* fetch the VARIANT structure */
- zend_hash_index_find(object->value.obj.properties, 0, (void **) &var_handle);
+ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle);
var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type);
if(!var_arg || (type != IS_VARIANT))
@@ -220,7 +228,7 @@ pval php_VARIANT_get_property_handler(zend_property_reference *property_referenc
php_error(E_WARNING, "Unknown method.");
break;
- pval_destructor(&overloaded_property->element);
+ zval_dtor(&overloaded_property->element);
}
}
@@ -236,7 +244,7 @@ int php_VARIANT_set_property_handler(zend_property_reference *property_reference
VARIANT *var_arg;
/* fetch the VARIANT structure */
- zend_hash_index_find(object->value.obj.properties, 0, (void **) &var_handle);
+ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle);
var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type);
if(!var_arg || (type != IS_VARIANT))
@@ -244,7 +252,7 @@ int php_VARIANT_set_property_handler(zend_property_reference *property_reference
overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data;
do_VARIANT_propset(var_arg, &overloaded_property->element, value);
- pval_destructor(&overloaded_property->element);
+ zval_dtor(&overloaded_property->element);
return SUCCESS;
}
@@ -423,7 +431,7 @@ static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value)
static void php_variant_destructor(zend_rsrc_list_entry *rsrc)
{
- efree(rsrc);
+ FREE_VARIANT(rsrc->ptr);
}
void php_register_VARIANT_class()