diff options
author | Harald Radi <phanto@php.net> | 2001-09-08 20:40:56 +0000 |
---|---|---|
committer | Harald Radi <phanto@php.net> | 2001-09-08 20:40:56 +0000 |
commit | 9a6fe9631efa2022a4c20a00ae7e49561a8014bd (patch) | |
tree | e9299baaf6f5328fd68a03958bd06084ca069878 | |
parent | d4b86e1c5bac94815a09739b5c04dff69705b441 (diff) | |
download | php-git-9a6fe9631efa2022a4c20a00ae7e49561a8014bd.tar.gz |
com_*() functions returned an oo-resource instead of an resource id,
thus subsequent com_*() calls to com-returnvalues failed.
-rw-r--r-- | ext/com/COM.c | 10 | ||||
-rw-r--r-- | ext/com/variant.h | 19 | ||||
-rw-r--r-- | ext/rpc/com/com_wrapper.c | 10 | ||||
-rw-r--r-- | ext/rpc/com/variant.h | 19 |
4 files changed, 40 insertions, 18 deletions
diff --git a/ext/com/COM.c b/ext/com/COM.c index f82602fb12..fda0b948da 100644 --- a/ext/com/COM.c +++ b/ext/com/COM.c @@ -804,9 +804,8 @@ PHP_FUNCTION(com_invoke) RETURN_FALSE; } - php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC); + RETVAL_VARIANT(var_result); - FREE_VARIANT(var_result); efree(arguments); } /* }}} */ @@ -1049,9 +1048,7 @@ PHP_FUNCTION(com_propget) RETURN_FALSE; } - php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC); - - FREE_VARIANT(var_result); + RETVAL_VARIANT(var_result); } /* }}} */ @@ -1201,8 +1198,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer pval_destructor(&overloaded_property->element); } - if (obj_prop != NULL) - { + if (obj_prop != NULL) { RETVAL_COM(obj); } diff --git a/ext/com/variant.h b/ext/com/variant.h index ce5b4e66ae..3fd11f32e4 100644 --- a/ext/com/variant.h +++ b/ext/com/variant.h @@ -3,15 +3,30 @@ #if PHP_WIN32 -#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \ +#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \ VariantInit(v); -#define FREE_VARIANT(v) VariantClear(v); \ +#define FREE_VARIANT(v) VariantClear(v); \ efree(v); #define IS_VARIANT php_VARIANT_get_le_variant() +#define ZVAL_VARIANT(z, v) if (V_VT(v) == VT_DISPATCH) { \ + comval *obj; \ + ALLOC_COM(obj); \ + php_COM_set(obj, &V_DISPATCH(v), TRUE TSRMLS_CC); \ + ZVAL_LONG((z), zend_list_insert(obj, IS_COM)); \ + } else { \ + php_variant_to_pval((v), (z), codepage TSRMLS_CC); \ + FREE_VARIANT(v); \ + } + +#define RETVAL_VARIANT(v) ZVAL_VARIANT(return_value, (v)); +#define RETURN_VARIANT(v) RETVAL_VARIANT(v) \ + return; + + #endif /* PHP_WIN32 */ #endif /* VARIANT_H */ diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c index f82602fb12..fda0b948da 100644 --- a/ext/rpc/com/com_wrapper.c +++ b/ext/rpc/com/com_wrapper.c @@ -804,9 +804,8 @@ PHP_FUNCTION(com_invoke) RETURN_FALSE; } - php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC); + RETVAL_VARIANT(var_result); - FREE_VARIANT(var_result); efree(arguments); } /* }}} */ @@ -1049,9 +1048,7 @@ PHP_FUNCTION(com_propget) RETURN_FALSE; } - php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC); - - FREE_VARIANT(var_result); + RETVAL_VARIANT(var_result); } /* }}} */ @@ -1201,8 +1198,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer pval_destructor(&overloaded_property->element); } - if (obj_prop != NULL) - { + if (obj_prop != NULL) { RETVAL_COM(obj); } diff --git a/ext/rpc/com/variant.h b/ext/rpc/com/variant.h index ce5b4e66ae..3fd11f32e4 100644 --- a/ext/rpc/com/variant.h +++ b/ext/rpc/com/variant.h @@ -3,15 +3,30 @@ #if PHP_WIN32 -#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \ +#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \ VariantInit(v); -#define FREE_VARIANT(v) VariantClear(v); \ +#define FREE_VARIANT(v) VariantClear(v); \ efree(v); #define IS_VARIANT php_VARIANT_get_le_variant() +#define ZVAL_VARIANT(z, v) if (V_VT(v) == VT_DISPATCH) { \ + comval *obj; \ + ALLOC_COM(obj); \ + php_COM_set(obj, &V_DISPATCH(v), TRUE TSRMLS_CC); \ + ZVAL_LONG((z), zend_list_insert(obj, IS_COM)); \ + } else { \ + php_variant_to_pval((v), (z), codepage TSRMLS_CC); \ + FREE_VARIANT(v); \ + } + +#define RETVAL_VARIANT(v) ZVAL_VARIANT(return_value, (v)); +#define RETURN_VARIANT(v) RETVAL_VARIANT(v) \ + return; + + #endif /* PHP_WIN32 */ #endif /* VARIANT_H */ |