summaryrefslogtreecommitdiff
path: root/ext/rpc
diff options
context:
space:
mode:
authorHarald Radi <phanto@php.net>2001-06-05 22:09:58 +0000
committerHarald Radi <phanto@php.net>2001-06-05 22:09:58 +0000
commitde780b345ca735c4ae8da1a6086db8437ae97661 (patch)
tree1e5b885d7296a3fc4898fcaed6d9e58b5ca9cfb8 /ext/rpc
parentf8a697e2e8d9119eb96d8d039eec9848e53de4c1 (diff)
downloadphp-git-de780b345ca735c4ae8da1a6086db8437ae97661.tar.gz
bugfix: collections didn't work correctly
Diffstat (limited to 'ext/rpc')
-rw-r--r--ext/rpc/com/com_wrapper.c59
-rw-r--r--ext/rpc/com/conversion.c14
2 files changed, 31 insertions, 42 deletions
diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c
index f79d300234..9bd8f0983f 100644
--- a/ext/rpc/com/com_wrapper.c
+++ b/ext/rpc/com/com_wrapper.c
@@ -968,7 +968,8 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
i_dispatch *obj, *obj_prop;
VARIANT *var_result;
- return_value.type = IS_NULL;
+ INIT_ZVAL(return_value);
+ ZVAL_NULL(&return_value);
/* fetch the IDispatch interface */
zend_hash_index_find(object->value.obj.properties, 0, (void **) &idispatch_handle);
@@ -987,7 +988,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
switch(overloaded_property->type)
{
case OE_IS_ARRAY:
- if(do_COM_offget(var_result, obj, &overloaded_property->element, element!=property_reference->elements_list->head)==FAILURE)
+ if(do_COM_offget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE)
{
efree(var_result);
efree(obj_prop);
@@ -996,7 +997,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
break;
case OE_IS_OBJECT:
- if(do_COM_propget(var_result, obj, &overloaded_property->element, element!=property_reference->elements_list->head)==FAILURE)
+ if(do_COM_propget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE)
{
efree(var_result);
efree(obj_prop);
@@ -1013,23 +1014,20 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
return_value.type = IS_OBJECT;
return_value.value.obj.ce = &com_class_entry;
return_value.value.obj.properties = (HashTable *) emalloc(sizeof(HashTable));
- return_value.is_ref = 1;
- return_value.refcount = 1;
zend_hash_init(return_value.value.obj.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
ALLOC_ZVAL(handle);
+ INIT_PZVAL(handle);
+ ZVAL_LONG(handle, zend_list_insert(obj, php_COM_get_le_idispatch()));
- handle->type = IS_LONG;
- handle->value.lval = zend_list_insert(obj, php_COM_get_le_idispatch());
pval_copy_constructor(handle);
- INIT_PZVAL(handle);
zend_hash_index_update(return_value.value.obj.properties, 0, &handle, sizeof(pval *), NULL);
}
else
{
efree(obj_prop);
return_value = *object;
- return_value.refcount++;
+ ZVAL_ADDREF(&return_value);
}
efree(var_result);
@@ -1041,49 +1039,40 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
if(var_result->vt == VT_DISPATCH)
{
+ pval *handle;
+
if(var_result->pdispVal == NULL)
{
efree(var_result);
efree(obj_prop);
return return_value;
}
+
+ obj = obj_prop;
php_COM_set(obj_prop, var_result->pdispVal, TRUE);
- obj = obj_prop;
+
+ return_value.type = IS_OBJECT;
+ return_value.value.obj.ce = &com_class_entry;
+ return_value.value.obj.properties = (HashTable *) emalloc(sizeof(HashTable));
+ zend_hash_init(return_value.value.obj.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
+
+ ALLOC_ZVAL(handle);
+ INIT_PZVAL(handle);
+ ZVAL_LONG(handle, zend_list_insert(obj, php_COM_get_le_idispatch()));
+
+ pval_copy_constructor(handle);
+ zend_hash_index_update(return_value.value.obj.properties, 0, &handle, sizeof(pval *), NULL);
}
else
{
efree(obj_prop);
obj_prop = NULL;
+ php_variant_to_pval(var_result, &return_value, TRUE, codepage);
}
pval_destructor(&overloaded_property->element);
}
-
- if(obj_prop != NULL)
- {
- pval *handle;
-
- return_value.type = IS_OBJECT;
- return_value.value.obj.ce = &com_class_entry;
- return_value.value.obj.properties = (HashTable *) emalloc(sizeof(HashTable));
- return_value.is_ref = 1;
- return_value.refcount = 1;
- zend_hash_init(return_value.value.obj.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- ALLOC_ZVAL(handle);
-
- handle->type = IS_LONG;
- handle->value.lval = zend_list_insert(obj, php_COM_get_le_idispatch());
- pval_copy_constructor(handle);
- INIT_PZVAL(handle);
- zend_hash_index_update(return_value.value.obj.properties, 0, &handle, sizeof(pval *), NULL);
- }
- else
- {
- php_variant_to_pval(var_result, &return_value, TRUE, codepage);
-
- }
efree(var_result);
return return_value;
diff --git a/ext/rpc/com/conversion.c b/ext/rpc/com/conversion.c
index a352f0185d..a105fb2e1b 100644
--- a/ext/rpc/com/conversion.c
+++ b/ext/rpc/com/conversion.c
@@ -403,6 +403,8 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent,
/* seemed like the smallest impact on unfamiliar code */
int ret = SUCCESS;
+ INIT_PZVAL(pval_arg);
+
/* Add SafeArray support */
if (var_arg->vt & VT_ARRAY)
{
@@ -679,21 +681,19 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent,
}
else
{
+ obj = emalloc(sizeof(i_dispatch));
+ php_COM_set(obj, var_arg->pdispVal, TRUE);
+
pval_arg->type = IS_OBJECT;
pval_arg->value.obj.ce = &com_class_entry;
pval_arg->value.obj.properties = (HashTable *) emalloc(sizeof(HashTable));
- pval_arg->is_ref = 1;
- pval_arg->refcount = 1;
zend_hash_init(pval_arg->value.obj.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
ALLOC_ZVAL(handle);
- obj = emalloc(sizeof(i_dispatch));
- php_COM_set(obj, var_arg->pdispVal, TRUE);
+ INIT_PZVAL(handle);
+ ZVAL_LONG(handle, zend_list_insert(obj, php_COM_get_le_idispatch()));
- handle->type = IS_LONG;
- handle->value.lval = zend_list_insert(obj, php_COM_get_le_idispatch());
pval_copy_constructor(handle);
- INIT_PZVAL(handle);
zend_hash_index_update(pval_arg->value.obj.properties, 0, &handle, sizeof(pval *), NULL);
}
}