From: Harald Radi Date: Mon, 20 May 2002 15:35:57 +0000 (+0000) Subject: integrating wez's patch X-Git-Tag: RELEASE_0_10~81 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e47a667cc91333627bc07aab42f0a7025181e85e;p=php integrating wez's patch --- diff --git a/ext/com/COM.c b/ext/com/COM.c index f8149faf7c..2e57eb1bd6 100644 --- a/ext/com/COM.c +++ b/ext/com/COM.c @@ -1427,25 +1427,13 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere PHPAPI zval *php_COM_object_from_dispatch(IDispatch *disp, zval *val TSRMLS_DC) { comval *obj; - long rid; zval *zobj; ALLOC_COM(obj); - C_DISPATCH(obj) = disp; - php_COM_set(obj, &C_DISPATCH(obj), FALSE TSRMLS_CC); - - /* resource */ - rid = zend_list_insert(obj, IS_COM); - - if (val == NULL) - MAKE_STD_ZVAL(val); - ZVAL_RESOURCE(val, rid); - - /* now we want an object */ MAKE_STD_ZVAL(zobj); - object_init_ex(zobj, &COM_class_entry); - zend_hash_index_update(Z_OBJPROP_P(zobj), 0, &val, sizeof(zval *), NULL); - + php_COM_set(obj, &disp, FALSE TSRMLS_CC); + ZVAL_COM_EX(zobj, obj, val); + return zobj; } diff --git a/ext/com/com.h b/ext/com/com.h index 62d08c3acd..2930f86fd9 100644 --- a/ext/com/com.h +++ b/ext/com/com.h @@ -24,13 +24,19 @@ typedef struct comval_ { END_EXTERN_C() #define ZVAL_COM(z,o) { \ - zval *handle; \ + zval *handle = NULL; \ + ZVAL_COM_EX(z,o,handle) \ + } + +#define ZVAL_COM_EX(z,o,handle) { \ HashTable *properties; \ \ ALLOC_HASHTABLE(properties); \ zend_hash_init(properties, 0, NULL, ZVAL_PTR_DTOR, 0); \ \ - MAKE_STD_ZVAL(handle); \ + if (handle == NULL) { \ + MAKE_STD_ZVAL(handle); \ + } \ ZVAL_LONG(handle, zend_list_insert((o), IS_COM)); \ \ zval_copy_ctor(handle); \ diff --git a/ext/com/conversion.c b/ext/com/conversion.c index 130885edd9..c9e4f89414 100644 --- a/ext/com/conversion.c +++ b/ext/com/conversion.c @@ -56,8 +56,6 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage T case IS_OBJECT: if (!strcmp(Z_OBJCE_P(pval_arg)->name, "VARIANT")) { type = VT_VARIANT|VT_BYREF; - } else if (!strcmp(Z_OBJCE_P(pval_arg)->name, "COM")) { - type = VT_DISPATCH; } else { type = VT_DISPATCH; } @@ -275,8 +273,9 @@ PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, comval_to_variant(pval_arg, var_arg TSRMLS_CC); } else { V_DISPATCH(var_arg) = php_COM_export_object(pval_arg TSRMLS_CC); - if (V_DISPATCH(var_arg)) + if (V_DISPATCH(var_arg)) { V_VT(var_arg) = VT_DISPATCH; + } } if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c index f8149faf7c..2e57eb1bd6 100644 --- a/ext/rpc/com/com_wrapper.c +++ b/ext/rpc/com/com_wrapper.c @@ -1427,25 +1427,13 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere PHPAPI zval *php_COM_object_from_dispatch(IDispatch *disp, zval *val TSRMLS_DC) { comval *obj; - long rid; zval *zobj; ALLOC_COM(obj); - C_DISPATCH(obj) = disp; - php_COM_set(obj, &C_DISPATCH(obj), FALSE TSRMLS_CC); - - /* resource */ - rid = zend_list_insert(obj, IS_COM); - - if (val == NULL) - MAKE_STD_ZVAL(val); - ZVAL_RESOURCE(val, rid); - - /* now we want an object */ MAKE_STD_ZVAL(zobj); - object_init_ex(zobj, &COM_class_entry); - zend_hash_index_update(Z_OBJPROP_P(zobj), 0, &val, sizeof(zval *), NULL); - + php_COM_set(obj, &disp, FALSE TSRMLS_CC); + ZVAL_COM_EX(zobj, obj, val); + return zobj; } diff --git a/ext/rpc/com/com_wrapper.h b/ext/rpc/com/com_wrapper.h index 62d08c3acd..2930f86fd9 100644 --- a/ext/rpc/com/com_wrapper.h +++ b/ext/rpc/com/com_wrapper.h @@ -24,13 +24,19 @@ typedef struct comval_ { END_EXTERN_C() #define ZVAL_COM(z,o) { \ - zval *handle; \ + zval *handle = NULL; \ + ZVAL_COM_EX(z,o,handle) \ + } + +#define ZVAL_COM_EX(z,o,handle) { \ HashTable *properties; \ \ ALLOC_HASHTABLE(properties); \ zend_hash_init(properties, 0, NULL, ZVAL_PTR_DTOR, 0); \ \ - MAKE_STD_ZVAL(handle); \ + if (handle == NULL) { \ + MAKE_STD_ZVAL(handle); \ + } \ ZVAL_LONG(handle, zend_list_insert((o), IS_COM)); \ \ zval_copy_ctor(handle); \ diff --git a/ext/rpc/com/conversion.c b/ext/rpc/com/conversion.c index 130885edd9..c9e4f89414 100644 --- a/ext/rpc/com/conversion.c +++ b/ext/rpc/com/conversion.c @@ -56,8 +56,6 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage T case IS_OBJECT: if (!strcmp(Z_OBJCE_P(pval_arg)->name, "VARIANT")) { type = VT_VARIANT|VT_BYREF; - } else if (!strcmp(Z_OBJCE_P(pval_arg)->name, "COM")) { - type = VT_DISPATCH; } else { type = VT_DISPATCH; } @@ -275,8 +273,9 @@ PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, comval_to_variant(pval_arg, var_arg TSRMLS_CC); } else { V_DISPATCH(var_arg) = php_COM_export_object(pval_arg TSRMLS_CC); - if (V_DISPATCH(var_arg)) + if (V_DISPATCH(var_arg)) { V_VT(var_arg) = VT_DISPATCH; + } } if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg);