diff options
author | Harald Radi <phanto@php.net> | 2001-07-26 14:45:41 +0000 |
---|---|---|
committer | Harald Radi <phanto@php.net> | 2001-07-26 14:45:41 +0000 |
commit | e27b13af238beb554b912e9fc48f54053ec9911d (patch) | |
tree | 3822b7077c5f22dacb778ac036a5deb9a6f85cff | |
parent | bd21994bed159fbb87763aee1063396fab558d1d (diff) | |
download | php-git-e27b13af238beb554b912e9fc48f54053ec9911d.tar.gz |
again fixed a few memory issues
-rw-r--r-- | ext/com/COM.c | 28 | ||||
-rw-r--r-- | ext/com/conversion.c | 4 | ||||
-rw-r--r-- | ext/com/php_COM.h | 2 | ||||
-rw-r--r-- | ext/rpc/com/com_wrapper.c | 28 | ||||
-rw-r--r-- | ext/rpc/com/conversion.c | 4 | ||||
-rw-r--r-- | ext/rpc/com/php_com.h | 2 |
6 files changed, 40 insertions, 28 deletions
diff --git a/ext/com/COM.c b/ext/com/COM.c index 7ffc9fffdd..7c2e761cc0 100644 --- a/ext/com/COM.c +++ b/ext/com/COM.c @@ -81,7 +81,7 @@ PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames PHPAPI HRESULT php_COM_release(comval *obj); PHPAPI HRESULT php_COM_addref(comval *obj); PHPAPI HRESULT php_COM_destruct(comval *obj); -PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup); +PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* pDisp, int cleanup); PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup); PHPAPI int php_COM_get_le_comval(); @@ -236,12 +236,19 @@ PHPAPI HRESULT php_COM_addref(comval *obj) return obj->refcount; } -PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup) +PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* ppDisp, int cleanup) { HRESULT hr = 1; DISPPARAMS dispparams; VARIANT *var_result; + IDispatch FAR* pDisp; + pDisp = *ppDisp; + if(cleanup) + { + *ppDisp = NULL; + } + C_REFCOUNT(obj) = 1; C_DISPATCH(obj) = pDisp; C_HASTLIB(obj) = SUCCEEDED(C_DISPATCH_VT(obj)->GetTypeInfo(C_DISPATCH(obj), 0, LANG_NEUTRAL, &C_TYPEINFO(obj))); @@ -610,7 +617,7 @@ PHP_FUNCTION(com_load) } } - php_COM_set(obj, C_DISPATCH(obj), TRUE); + php_COM_set(obj, &C_DISPATCH(obj), TRUE); if(INI_INT("com.autoregister_casesensitive")) { @@ -865,7 +872,7 @@ PHP_FUNCTION(com_invoke) RETURN_FALSE; } - php_variant_to_pval(var_result, return_value, 0, codepage); + php_variant_to_pval(var_result, return_value, FALSE, codepage); FREE_VARIANT(var_result); efree(arguments); @@ -1066,7 +1073,7 @@ static void do_COM_propput(pval *return_value, comval *obj, pval *arg_property, if(SUCCEEDED(hr)) { - php_variant_to_pval(var_result, return_value, 0, codepage); + php_variant_to_pval(var_result, return_value, FALSE, codepage); } else { @@ -1112,7 +1119,7 @@ PHP_FUNCTION(com_propget) RETURN_FALSE; } - php_variant_to_pval(var_result, return_value, 0, codepage); + php_variant_to_pval(var_result, return_value, FALSE, codepage); FREE_VARIANT(var_result); } @@ -1261,7 +1268,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer } obj = obj_prop; - php_COM_set(obj, V_DISPATCH(var_result), TRUE); + php_COM_set(obj, &V_DISPATCH(var_result), TRUE); RETVAL_COM(obj); } @@ -1347,7 +1354,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere } obj = obj_prop; - php_COM_set(obj, V_DISPATCH(var_result), TRUE); + php_COM_set(obj, &V_DISPATCH(var_result), TRUE); } else { @@ -1449,11 +1456,10 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro } else { - php_variant_to_pval(var_result, return_value, 0, codepage); + php_variant_to_pval(var_result, return_value, FALSE, codepage); } -// FREE_VARIANT(var_result); - efree(var_result); + FREE_VARIANT(var_result); efree(arguments); } diff --git a/ext/com/conversion.c b/ext/com/conversion.c index 1bf6ed86ee..11fbd8a28f 100644 --- a/ext/com/conversion.c +++ b/ext/com/conversion.c @@ -754,8 +754,8 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, else { ALLOC_COM(obj); - php_COM_set(obj, V_DISPATCH(var_arg), TRUE); - + php_COM_set(obj, &V_DISPATCH(var_arg), TRUE); + ZVAL_COM(pval_arg, obj); } } diff --git a/ext/com/php_COM.h b/ext/com/php_COM.h index 58e06dc854..b37a8eca05 100644 --- a/ext/com/php_COM.h +++ b/ext/com/php_COM.h @@ -15,7 +15,7 @@ extern PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rg extern PHPAPI HRESULT php_COM_release(comval *obj); extern PHPAPI HRESULT php_COM_addref(comval *obj); extern PHPAPI HRESULT php_COM_destruct(comval *obj); -extern PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup); +extern PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* pDisp, int cleanup); extern PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup); extern int php_COM_get_le_comval(); diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c index 7ffc9fffdd..7c2e761cc0 100644 --- a/ext/rpc/com/com_wrapper.c +++ b/ext/rpc/com/com_wrapper.c @@ -81,7 +81,7 @@ PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames PHPAPI HRESULT php_COM_release(comval *obj); PHPAPI HRESULT php_COM_addref(comval *obj); PHPAPI HRESULT php_COM_destruct(comval *obj); -PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup); +PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* pDisp, int cleanup); PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup); PHPAPI int php_COM_get_le_comval(); @@ -236,12 +236,19 @@ PHPAPI HRESULT php_COM_addref(comval *obj) return obj->refcount; } -PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup) +PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* ppDisp, int cleanup) { HRESULT hr = 1; DISPPARAMS dispparams; VARIANT *var_result; + IDispatch FAR* pDisp; + pDisp = *ppDisp; + if(cleanup) + { + *ppDisp = NULL; + } + C_REFCOUNT(obj) = 1; C_DISPATCH(obj) = pDisp; C_HASTLIB(obj) = SUCCEEDED(C_DISPATCH_VT(obj)->GetTypeInfo(C_DISPATCH(obj), 0, LANG_NEUTRAL, &C_TYPEINFO(obj))); @@ -610,7 +617,7 @@ PHP_FUNCTION(com_load) } } - php_COM_set(obj, C_DISPATCH(obj), TRUE); + php_COM_set(obj, &C_DISPATCH(obj), TRUE); if(INI_INT("com.autoregister_casesensitive")) { @@ -865,7 +872,7 @@ PHP_FUNCTION(com_invoke) RETURN_FALSE; } - php_variant_to_pval(var_result, return_value, 0, codepage); + php_variant_to_pval(var_result, return_value, FALSE, codepage); FREE_VARIANT(var_result); efree(arguments); @@ -1066,7 +1073,7 @@ static void do_COM_propput(pval *return_value, comval *obj, pval *arg_property, if(SUCCEEDED(hr)) { - php_variant_to_pval(var_result, return_value, 0, codepage); + php_variant_to_pval(var_result, return_value, FALSE, codepage); } else { @@ -1112,7 +1119,7 @@ PHP_FUNCTION(com_propget) RETURN_FALSE; } - php_variant_to_pval(var_result, return_value, 0, codepage); + php_variant_to_pval(var_result, return_value, FALSE, codepage); FREE_VARIANT(var_result); } @@ -1261,7 +1268,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer } obj = obj_prop; - php_COM_set(obj, V_DISPATCH(var_result), TRUE); + php_COM_set(obj, &V_DISPATCH(var_result), TRUE); RETVAL_COM(obj); } @@ -1347,7 +1354,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere } obj = obj_prop; - php_COM_set(obj, V_DISPATCH(var_result), TRUE); + php_COM_set(obj, &V_DISPATCH(var_result), TRUE); } else { @@ -1449,11 +1456,10 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro } else { - php_variant_to_pval(var_result, return_value, 0, codepage); + php_variant_to_pval(var_result, return_value, FALSE, codepage); } -// FREE_VARIANT(var_result); - efree(var_result); + FREE_VARIANT(var_result); efree(arguments); } diff --git a/ext/rpc/com/conversion.c b/ext/rpc/com/conversion.c index 1bf6ed86ee..11fbd8a28f 100644 --- a/ext/rpc/com/conversion.c +++ b/ext/rpc/com/conversion.c @@ -754,8 +754,8 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, else { ALLOC_COM(obj); - php_COM_set(obj, V_DISPATCH(var_arg), TRUE); - + php_COM_set(obj, &V_DISPATCH(var_arg), TRUE); + ZVAL_COM(pval_arg, obj); } } diff --git a/ext/rpc/com/php_com.h b/ext/rpc/com/php_com.h index 58e06dc854..b37a8eca05 100644 --- a/ext/rpc/com/php_com.h +++ b/ext/rpc/com/php_com.h @@ -15,7 +15,7 @@ extern PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rg extern PHPAPI HRESULT php_COM_release(comval *obj); extern PHPAPI HRESULT php_COM_addref(comval *obj); extern PHPAPI HRESULT php_COM_destruct(comval *obj); -extern PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup); +extern PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* pDisp, int cleanup); extern PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup); extern int php_COM_get_le_comval(); |