Huw Davies : oleaut32: Fix VARIANT_UserFree.
Alexandre Julliard
julliard at wine.codeweavers.com
Sun May 7 03:36:39 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 3abd27c624cfbdcb480d4a7ebc711e6c0b9339ae
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=3abd27c624cfbdcb480d4a7ebc711e6c0b9339ae
Author: Huw Davies <huw at codeweavers.com>
Date: Fri May 5 15:49:57 2006 +0100
oleaut32: Fix VARIANT_UserFree.
---
dlls/oleaut32/usrmarshal.c | 37 ++++++++++++++++++++-----------------
1 files changed, 20 insertions(+), 17 deletions(-)
diff --git a/dlls/oleaut32/usrmarshal.c b/dlls/oleaut32/usrmarshal.c
index 3177e0b..a26b93d 100644
--- a/dlls/oleaut32/usrmarshal.c
+++ b/dlls/oleaut32/usrmarshal.c
@@ -646,23 +646,26 @@ void WINAPI VARIANT_UserFree(unsigned lo
VariantClear(pvar);
if (!ref) return;
- switch (vt) {
- case VT_BSTR | VT_BYREF:
- BSTR_UserFree(pFlags, ref);
- break;
- case VT_VARIANT | VT_BYREF:
- VARIANT_UserFree(pFlags, ref);
- break;
- case VT_RECORD | VT_BYREF:
- FIXME("handle BRECORD by ref\n");
- break;
- case VT_UNKNOWN:
- case VT_DISPATCH:
- IUnknown_Release(V_UNKNOWN(pvar));
- break;
- default:
- FIXME("handle unknown complex type\n");
- break;
+ if(vt & VT_ARRAY)
+ LPSAFEARRAY_UserFree(pFlags, V_ARRAYREF(pvar));
+ else
+ {
+ switch (vt)
+ {
+ case VT_BSTR | VT_BYREF:
+ BSTR_UserFree(pFlags, V_BSTRREF(pvar));
+ break;
+ case VT_VARIANT | VT_BYREF:
+ VARIANT_UserFree(pFlags, V_VARIANTREF(pvar));
+ break;
+ case VT_RECORD | VT_BYREF:
+ FIXME("handle BRECORD by ref\n");
+ break;
+ case VT_UNKNOWN | VT_BYREF:
+ case VT_DISPATCH | VT_BYREF:
+ IUnknown_Release(*V_UNKNOWNREF(pvar));
+ break;
+ }
}
CoTaskMemFree(ref);
More information about the wine-cvs
mailing list