From fb9c8f841f94cf80133d8be059e7ca8ae0973047 Mon Sep 17 00:00:00 2001 From: Harald Radi Date: Thu, 18 Apr 2002 10:15:33 +0000 Subject: [PATCH] MFH --- ext/com/COM.c | 11 +++++++---- ext/com/conversion.c | 24 +++++++++++++++--------- ext/rpc/com/com_wrapper.c | 11 +++++++---- ext/rpc/com/conversion.c | 24 +++++++++++++++--------- 4 files changed, 44 insertions(+), 26 deletions(-) diff --git a/ext/com/COM.c b/ext/com/COM.c index 854bd6be13..92128ad0c2 100644 --- a/ext/com/COM.c +++ b/ext/com/COM.c @@ -133,18 +133,20 @@ PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DIS if (FAILED(hr)) { switch (hr) { case DISP_E_EXCEPTION: { - int srclen=0; - char *src=estrdup(""); - int desclen=0; - char *desc=estrdup(""); + char *src=estrdup("Unavailable"); + int srclen=strlen(src); + char *desc=estrdup("Unavailable"); + int desclen=strlen(desc); if (ExceptInfo.bstrSource) { + efree(src); src = php_OLECHAR_to_char(ExceptInfo.bstrSource, &srclen, codepage TSRMLS_CC); SysFreeString(ExceptInfo.bstrSource); } if (ExceptInfo.bstrDescription) { + efree(desc); desc = php_OLECHAR_to_char(ExceptInfo.bstrDescription, &desclen, codepage TSRMLS_CC); SysFreeString(ExceptInfo.bstrDescription); } @@ -159,6 +161,7 @@ PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DIS SysFreeString(ExceptInfo.bstrHelpFile); } } + break; case DISP_E_PARAMNOTFOUND: case DISP_E_TYPEMISMATCH: *ErrString = pemalloc(25, 1); diff --git a/ext/com/conversion.c b/ext/com/conversion.c index 358314f132..a0005e6200 100644 --- a/ext/com/conversion.c +++ b/ext/com/conversion.c @@ -380,8 +380,7 @@ PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, /* should be, but isn't :) - if (V_VT(var_arg) != (VT_VARIANT|VT_BYREF)) - { + if (V_VT(var_arg) != (VT_VARIANT|VT_BYREF)) { VariantInit(var_arg); } */ @@ -631,14 +630,22 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS break; case VT_BSTR: + Z_TYPE_P(pval_arg) = IS_STRING; + if (V_ISBYREF(var_arg)) { - Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); + if (*V_BSTR(var_arg)) { + Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); + } else { + ZVAL_NULL(pval_arg); + } efree(V_BSTRREF(var_arg)); } else { - Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); + if (V_BSTR(var_arg)) { + Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); + } else { + ZVAL_NULL(pval_arg); + } } - - Z_TYPE_P(pval_arg) = IS_STRING; break; case VT_DATE: { @@ -679,8 +686,7 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS hr = V_UNKNOWN(var_arg)->lpVtbl->QueryInterface(var_arg->punkVal, &IID_IDispatch, &V_DISPATCH(var_arg)); - if (FAILED(hr)) - { + if (FAILED(hr)) { char *error_message; error_message = php_COM_error_message(hr TSRMLS_CC); @@ -844,4 +850,4 @@ static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC) } } -#endif /* PHP_WIN32 */ \ No newline at end of file +#endif /* PHP_WIN32 */ diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c index 854bd6be13..92128ad0c2 100644 --- a/ext/rpc/com/com_wrapper.c +++ b/ext/rpc/com/com_wrapper.c @@ -133,18 +133,20 @@ PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DIS if (FAILED(hr)) { switch (hr) { case DISP_E_EXCEPTION: { - int srclen=0; - char *src=estrdup(""); - int desclen=0; - char *desc=estrdup(""); + char *src=estrdup("Unavailable"); + int srclen=strlen(src); + char *desc=estrdup("Unavailable"); + int desclen=strlen(desc); if (ExceptInfo.bstrSource) { + efree(src); src = php_OLECHAR_to_char(ExceptInfo.bstrSource, &srclen, codepage TSRMLS_CC); SysFreeString(ExceptInfo.bstrSource); } if (ExceptInfo.bstrDescription) { + efree(desc); desc = php_OLECHAR_to_char(ExceptInfo.bstrDescription, &desclen, codepage TSRMLS_CC); SysFreeString(ExceptInfo.bstrDescription); } @@ -159,6 +161,7 @@ PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DIS SysFreeString(ExceptInfo.bstrHelpFile); } } + break; case DISP_E_PARAMNOTFOUND: case DISP_E_TYPEMISMATCH: *ErrString = pemalloc(25, 1); diff --git a/ext/rpc/com/conversion.c b/ext/rpc/com/conversion.c index 358314f132..a0005e6200 100644 --- a/ext/rpc/com/conversion.c +++ b/ext/rpc/com/conversion.c @@ -380,8 +380,7 @@ PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, /* should be, but isn't :) - if (V_VT(var_arg) != (VT_VARIANT|VT_BYREF)) - { + if (V_VT(var_arg) != (VT_VARIANT|VT_BYREF)) { VariantInit(var_arg); } */ @@ -631,14 +630,22 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS break; case VT_BSTR: + Z_TYPE_P(pval_arg) = IS_STRING; + if (V_ISBYREF(var_arg)) { - Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); + if (*V_BSTR(var_arg)) { + Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); + } else { + ZVAL_NULL(pval_arg); + } efree(V_BSTRREF(var_arg)); } else { - Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); + if (V_BSTR(var_arg)) { + Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); + } else { + ZVAL_NULL(pval_arg); + } } - - Z_TYPE_P(pval_arg) = IS_STRING; break; case VT_DATE: { @@ -679,8 +686,7 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS hr = V_UNKNOWN(var_arg)->lpVtbl->QueryInterface(var_arg->punkVal, &IID_IDispatch, &V_DISPATCH(var_arg)); - if (FAILED(hr)) - { + if (FAILED(hr)) { char *error_message; error_message = php_COM_error_message(hr TSRMLS_CC); @@ -844,4 +850,4 @@ static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC) } } -#endif /* PHP_WIN32 */ \ No newline at end of file +#endif /* PHP_WIN32 */ -- 2.50.1