Michael Stefaniuc : oleaut32/tests: COM cleanup for usrmarshal.c.

Alexandre Julliard julliard at winehq.org
Wed Dec 29 11:14:52 CST 2010


Module: wine
Branch: master
Commit: 74ce3e53d41802a27f12fea2b6e94ec4c8ab464e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=74ce3e53d41802a27f12fea2b6e94ec4c8ab464e

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Wed Dec 29 02:53:23 2010 +0100

oleaut32/tests: COM cleanup for usrmarshal.c.

---

 dlls/oleaut32/tests/usrmarshal.c |   26 ++++++++++++++++----------
 1 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/dlls/oleaut32/tests/usrmarshal.c b/dlls/oleaut32/tests/usrmarshal.c
index 1aae0f5..def1c15 100644
--- a/dlls/oleaut32/tests/usrmarshal.c
+++ b/dlls/oleaut32/tests/usrmarshal.c
@@ -19,6 +19,7 @@
  */
 
 #define COBJMACROS
+#define CONST_VTABLE
 
 #include <stdarg.h>
 
@@ -669,10 +670,15 @@ static void test_marshal_BSTR(void)
 
 typedef struct
 {
-    const IUnknownVtbl *lpVtbl;
+    IUnknown IUnknown_iface;
     ULONG refs;
 } HeapUnknown;
 
+static inline HeapUnknown *impl_from_IUnknown(IUnknown *iface)
+{
+    return CONTAINING_RECORD(iface, HeapUnknown, IUnknown_iface);
+}
+
 static HRESULT WINAPI HeapUnknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
 {
     if (IsEqualIID(riid, &IID_IUnknown))
@@ -687,13 +693,13 @@ static HRESULT WINAPI HeapUnknown_QueryInterface(IUnknown *iface, REFIID riid, v
 
 static ULONG WINAPI HeapUnknown_AddRef(IUnknown *iface)
 {
-    HeapUnknown *This = (HeapUnknown *)iface;
+    HeapUnknown *This = impl_from_IUnknown(iface);
     return InterlockedIncrement((LONG*)&This->refs);
 }
 
 static ULONG WINAPI HeapUnknown_Release(IUnknown *iface)
 {
-    HeapUnknown *This = (HeapUnknown *)iface;
+    HeapUnknown *This = impl_from_IUnknown(iface);
     ULONG refs = InterlockedDecrement((LONG*)&This->refs);
     if (!refs) HeapFree(GetProcessHeap(), 0, This);
     return refs;
@@ -1437,12 +1443,12 @@ static void test_marshal_VARIANT(void)
 
     /*** UNKNOWN ***/
     heap_unknown = HeapAlloc(GetProcessHeap(), 0, sizeof(*heap_unknown));
-    heap_unknown->lpVtbl = &HeapUnknown_Vtbl;
+    heap_unknown->IUnknown_iface.lpVtbl = &HeapUnknown_Vtbl;
     heap_unknown->refs = 1;
     VariantInit(&v);
     VariantInit(&v2);
     V_VT(&v) = VT_UNKNOWN;
-    V_UNKNOWN(&v) = (IUnknown *)heap_unknown;
+    V_UNKNOWN(&v) = &heap_unknown->IUnknown_iface;
 
     rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v);
     ok(stubMsg.BufferLength > 32, "size %d\n", stubMsg.BufferLength);
@@ -1471,7 +1477,7 @@ static void test_marshal_VARIANT(void)
         VARIANT v3;
         VariantInit(&v3);
         V_VT(&v3) = VT_UNKNOWN;
-        V_UNKNOWN(&v3) = (IUnknown *)heap_unknown;
+        V_UNKNOWN(&v3) = &heap_unknown->IUnknown_iface;
         IUnknown_AddRef(V_UNKNOWN(&v3));
         stubMsg.Buffer = buffer;
         next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v3);
@@ -1479,7 +1485,7 @@ static void test_marshal_VARIANT(void)
         ok(V_UNKNOWN(&v) == V_UNKNOWN(&v3), "got %p expect %p\n", V_UNKNOWN(&v), V_UNKNOWN(&v3));
         VARIANT_UserFree(&umcb.Flags, &v3);
         ok(heap_unknown->refs == 1, "%d refcounts of IUnknown leaked\n", heap_unknown->refs - 1);
-        IUnknown_Release((IUnknown *)heap_unknown);
+        IUnknown_Release(&heap_unknown->IUnknown_iface);
     }
     HeapFree(GetProcessHeap(), 0, oldbuffer);
 
@@ -1509,7 +1515,7 @@ static void test_marshal_VARIANT(void)
 
     /*** UNKNOWN BYREF ***/
     heap_unknown = HeapAlloc(GetProcessHeap(), 0, sizeof(*heap_unknown));
-    heap_unknown->lpVtbl = &HeapUnknown_Vtbl;
+    heap_unknown->IUnknown_iface.lpVtbl = &HeapUnknown_Vtbl;
     heap_unknown->refs = 1;
     VariantInit(&v);
     VariantInit(&v2);
@@ -1545,7 +1551,7 @@ static void test_marshal_VARIANT(void)
         VARIANT v3;
         VariantInit(&v3);
         V_VT(&v3) = VT_UNKNOWN;
-        V_UNKNOWN(&v3) = (IUnknown *)heap_unknown;
+        V_UNKNOWN(&v3) = &heap_unknown->IUnknown_iface;
         IUnknown_AddRef(V_UNKNOWN(&v3));
         stubMsg.Buffer = buffer;
         next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v3);
@@ -1553,7 +1559,7 @@ static void test_marshal_VARIANT(void)
         ok(*V_UNKNOWNREF(&v) == *V_UNKNOWNREF(&v3), "got %p expect %p\n", *V_UNKNOWNREF(&v), *V_UNKNOWNREF(&v3));
         VARIANT_UserFree(&umcb.Flags, &v3);
         ok(heap_unknown->refs == 1, "%d refcounts of IUnknown leaked\n", heap_unknown->refs - 1);
-        IUnknown_Release((IUnknown *)heap_unknown);
+        IUnknown_Release(&heap_unknown->IUnknown_iface);
     }
     HeapFree(GetProcessHeap(), 0, oldbuffer);
 }




More information about the wine-cvs mailing list