com_*() functions returned an oo-resource instead of an resource id,

thus subsequent com_*() calls to com-returnvalues failed.
This commit is contained in:
Harald Radi 2001-09-08 20:40:56 +00:00
parent d4b86e1c5b
commit 9a6fe9631e
4 changed files with 40 additions and 18 deletions

View file

@ -804,9 +804,8 @@ PHP_FUNCTION(com_invoke)
RETURN_FALSE; RETURN_FALSE;
} }
php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC); RETVAL_VARIANT(var_result);
FREE_VARIANT(var_result);
efree(arguments); efree(arguments);
} }
/* }}} */ /* }}} */
@ -1049,9 +1048,7 @@ PHP_FUNCTION(com_propget)
RETURN_FALSE; RETURN_FALSE;
} }
php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC); RETVAL_VARIANT(var_result);
FREE_VARIANT(var_result);
} }
/* }}} */ /* }}} */
@ -1201,8 +1198,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
pval_destructor(&overloaded_property->element); pval_destructor(&overloaded_property->element);
} }
if (obj_prop != NULL) if (obj_prop != NULL) {
{
RETVAL_COM(obj); RETVAL_COM(obj);
} }

View file

@ -3,15 +3,30 @@
#if PHP_WIN32 #if PHP_WIN32
#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \ #define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \
VariantInit(v); VariantInit(v);
#define FREE_VARIANT(v) VariantClear(v); \ #define FREE_VARIANT(v) VariantClear(v); \
efree(v); efree(v);
#define IS_VARIANT php_VARIANT_get_le_variant() #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 /* PHP_WIN32 */
#endif /* VARIANT_H */ #endif /* VARIANT_H */

View file

@ -804,9 +804,8 @@ PHP_FUNCTION(com_invoke)
RETURN_FALSE; RETURN_FALSE;
} }
php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC); RETVAL_VARIANT(var_result);
FREE_VARIANT(var_result);
efree(arguments); efree(arguments);
} }
/* }}} */ /* }}} */
@ -1049,9 +1048,7 @@ PHP_FUNCTION(com_propget)
RETURN_FALSE; RETURN_FALSE;
} }
php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC); RETVAL_VARIANT(var_result);
FREE_VARIANT(var_result);
} }
/* }}} */ /* }}} */
@ -1201,8 +1198,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
pval_destructor(&overloaded_property->element); pval_destructor(&overloaded_property->element);
} }
if (obj_prop != NULL) if (obj_prop != NULL) {
{
RETVAL_COM(obj); RETVAL_COM(obj);
} }

View file

@ -3,15 +3,30 @@
#if PHP_WIN32 #if PHP_WIN32
#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \ #define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \
VariantInit(v); VariantInit(v);
#define FREE_VARIANT(v) VariantClear(v); \ #define FREE_VARIANT(v) VariantClear(v); \
efree(v); efree(v);
#define IS_VARIANT php_VARIANT_get_le_variant() #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 /* PHP_WIN32 */
#endif /* VARIANT_H */ #endif /* VARIANT_H */