[PATCH 1/2] dxdiagn: COM cleanup for the IDxDiagProvider iface.

Michael Stefaniuc mstefani at redhat.de
Wed Aug 10 16:58:23 CDT 2011


---
 dlls/dxdiagn/dxdiag_private.h |   17 --------------
 dlls/dxdiagn/provider.c       |   47 +++++++++++++++++++++++++++++-----------
 2 files changed, 34 insertions(+), 30 deletions(-)

diff --git a/dlls/dxdiagn/dxdiag_private.h b/dlls/dxdiagn/dxdiag_private.h
index 31d3e6c..cfcae40 100644
--- a/dlls/dxdiagn/dxdiag_private.h
+++ b/dlls/dxdiagn/dxdiag_private.h
@@ -37,23 +37,6 @@ typedef struct IDxDiagContainerImpl IDxDiagContainerImpl;
 typedef struct IDxDiagContainerImpl_Container IDxDiagContainerImpl_Container;
 
 /* ---------------- */
-/* IDxDiagProvider  */
-/* ---------------- */
-
-/*****************************************************************************
- * IDxDiagProvider implementation structure
- */
-struct IDxDiagProviderImpl {
-  /* IUnknown fields */
-  const IDxDiagProviderVtbl *lpVtbl;
-  LONG        ref;
-  /* IDxDiagProvider fields */
-  BOOL        init;
-  DXDIAG_INIT_PARAMS params;
-  IDxDiagContainerImpl_Container *info_root;
-};
-
-/* ---------------- */
 /* IDxDiagContainer  */
 /* ---------------- */
 
diff --git a/dlls/dxdiagn/provider.c b/dlls/dxdiagn/provider.c
index 2a48b2e..a881ea7 100644
--- a/dlls/dxdiagn/provider.c
+++ b/dlls/dxdiagn/provider.c
@@ -67,10 +67,25 @@ static const WCHAR szRevisionId[] = {'s','z','R','e','v','i','s','i','o','n','I'
 static const WCHAR dwRefreshRate[] = {'d','w','R','e','f','r','e','s','h','R','a','t','e',0};
 static const WCHAR szManufacturer[] = {'s','z','M','a','n','u','f','a','c','t','u','r','e','r',0};
 
+struct IDxDiagProviderImpl
+{
+  IDxDiagProvider IDxDiagProvider_iface;
+  LONG ref;
+  BOOL init;
+  DXDIAG_INIT_PARAMS params;
+  IDxDiagContainerImpl_Container *info_root;
+};
+
+static inline IDxDiagProviderImpl *impl_from_IDxDiagProvider(IDxDiagProvider *iface)
+{
+     return CONTAINING_RECORD(iface, IDxDiagProviderImpl, IDxDiagProvider_iface);
+}
+
 /* IDxDiagProvider IUnknown parts follow: */
-static HRESULT WINAPI IDxDiagProviderImpl_QueryInterface(PDXDIAGPROVIDER iface, REFIID riid, LPVOID *ppobj)
+static HRESULT WINAPI IDxDiagProviderImpl_QueryInterface(IDxDiagProvider *iface, REFIID riid,
+        void **ppobj)
 {
-    IDxDiagProviderImpl *This = (IDxDiagProviderImpl *)iface;
+    IDxDiagProviderImpl *This = impl_from_IDxDiagProvider(iface);
 
     if (!ppobj) return E_INVALIDARG;
 
@@ -86,8 +101,9 @@ static HRESULT WINAPI IDxDiagProviderImpl_QueryInterface(PDXDIAGPROVIDER iface,
     return E_NOINTERFACE;
 }
 
-static ULONG WINAPI IDxDiagProviderImpl_AddRef(PDXDIAGPROVIDER iface) {
-    IDxDiagProviderImpl *This = (IDxDiagProviderImpl *)iface;
+static ULONG WINAPI IDxDiagProviderImpl_AddRef(IDxDiagProvider *iface)
+{
+    IDxDiagProviderImpl *This = impl_from_IDxDiagProvider(iface);
     ULONG refCount = InterlockedIncrement(&This->ref);
 
     TRACE("(%p)->(ref before=%u)\n", This, refCount - 1);
@@ -97,8 +113,9 @@ static ULONG WINAPI IDxDiagProviderImpl_AddRef(PDXDIAGPROVIDER iface) {
     return refCount;
 }
 
-static ULONG WINAPI IDxDiagProviderImpl_Release(PDXDIAGPROVIDER iface) {
-    IDxDiagProviderImpl *This = (IDxDiagProviderImpl *)iface;
+static ULONG WINAPI IDxDiagProviderImpl_Release(IDxDiagProvider *iface)
+{
+    IDxDiagProviderImpl *This = impl_from_IDxDiagProvider(iface);
     ULONG refCount = InterlockedDecrement(&This->ref);
 
     TRACE("(%p)->(ref before=%u)\n", This, refCount + 1);
@@ -114,8 +131,10 @@ static ULONG WINAPI IDxDiagProviderImpl_Release(PDXDIAGPROVIDER iface) {
 }
 
 /* IDxDiagProvider Interface follow: */
-static HRESULT WINAPI IDxDiagProviderImpl_Initialize(PDXDIAGPROVIDER iface, DXDIAG_INIT_PARAMS* pParams) {
-    IDxDiagProviderImpl *This = (IDxDiagProviderImpl *)iface;
+static HRESULT WINAPI IDxDiagProviderImpl_Initialize(IDxDiagProvider *iface,
+        DXDIAG_INIT_PARAMS *pParams)
+{
+    IDxDiagProviderImpl *This = impl_from_IDxDiagProvider(iface);
     HRESULT hr;
 
     TRACE("(%p,%p)\n", iface, pParams);
@@ -140,8 +159,10 @@ static HRESULT WINAPI IDxDiagProviderImpl_Initialize(PDXDIAGPROVIDER iface, DXDI
     return S_OK;
 }
 
-static HRESULT WINAPI IDxDiagProviderImpl_GetRootContainer(PDXDIAGPROVIDER iface, IDxDiagContainer** ppInstance) {
-  IDxDiagProviderImpl *This = (IDxDiagProviderImpl *)iface;
+static HRESULT WINAPI IDxDiagProviderImpl_GetRootContainer(IDxDiagProvider *iface,
+        IDxDiagContainer **ppInstance)
+{
+  IDxDiagProviderImpl *This = impl_from_IDxDiagProvider(iface);
 
   TRACE("(%p,%p)\n", iface, ppInstance);
 
@@ -150,7 +171,7 @@ static HRESULT WINAPI IDxDiagProviderImpl_GetRootContainer(PDXDIAGPROVIDER iface
   }
 
   return DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, This->info_root,
-                                      (IDxDiagProvider *)This, (void **)ppInstance);
+          &This->IDxDiagProvider_iface, (void **)ppInstance);
 }
 
 static const IDxDiagProviderVtbl DxDiagProvider_Vtbl =
@@ -172,9 +193,9 @@ HRESULT DXDiag_CreateDXDiagProvider(LPCLASSFACTORY iface, LPUNKNOWN punkOuter, R
 
   provider = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDxDiagProviderImpl));
   if (NULL == provider) return E_OUTOFMEMORY;
-  provider->lpVtbl = &DxDiagProvider_Vtbl;
+  provider->IDxDiagProvider_iface.lpVtbl = &DxDiagProvider_Vtbl;
   provider->ref = 0; /* will be inited with QueryInterface */
-  return IDxDiagProviderImpl_QueryInterface ((PDXDIAGPROVIDER)provider, riid, ppobj);
+  return IDxDiagProviderImpl_QueryInterface(&provider->IDxDiagProvider_iface, riid, ppobj);
 }
 
 static void free_property_information(IDxDiagContainerImpl_Property *prop)
-- 
1.7.4.4



More information about the wine-patches mailing list