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