Michael Stefaniuc : dplayx: Merge the DirectPlay QueryInterface helper.

Alexandre Julliard julliard at winehq.org
Tue Apr 2 13:38:35 CDT 2013


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

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Fri Mar 29 16:50:11 2013 +0100

dplayx: Merge the DirectPlay QueryInterface helper.

---

 dlls/dplayx/dplay.c |   74 ++++++++++++++++++++++++++++++++------------------
 1 files changed, 47 insertions(+), 27 deletions(-)

diff --git a/dlls/dplayx/dplay.c b/dlls/dplayx/dplay.c
index b3bb7c6..8a95538 100644
--- a/dlls/dplayx/dplay.c
+++ b/dlls/dplayx/dplay.c
@@ -17,6 +17,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#define COBJMACROS
 #include "config.h"
 #include "wine/port.h"
 
@@ -363,31 +364,6 @@ static void dplay_destroy(IDirectPlayImpl *obj)
      HeapFree( GetProcessHeap(), 0, obj );
 }
 
-/* Direct Play methods */
-
-/* Shared between all dplay types */
-static HRESULT WINAPI DP_QueryInterface( IDirectPlayImpl *This, REFIID riid, void **ppvObj )
-{
-  TRACE("(%p)->(%s,%p)\n", This, debugstr_guid( riid ), ppvObj );
-
-  if( IsEqualGUID( &IID_IDirectPlay2, riid ) || IsEqualGUID( &IID_IDirectPlay3, riid ) ||
-      IsEqualGUID( &IID_IDirectPlay4, riid ) )
-    *ppvObj = &This->IDirectPlay4_iface;
-  else if( IsEqualGUID( &IID_IUnknown, riid ) || IsEqualGUID( &IID_IDirectPlay2A, riid ) ||
-          IsEqualGUID( &IID_IDirectPlay3A, riid ) || IsEqualGUID( &IID_IDirectPlay4A, riid ) )
-    *ppvObj = &This->IDirectPlay4A_iface;
-  else
-  {
-    /* Unsupported interface */
-    *ppvObj = NULL;
-    return E_NOINTERFACE;
-  }
-
-  IDirectPlayX_AddRef( (LPDIRECTPLAY2)*ppvObj );
-
-  return S_OK;
-}
-
 static inline DPID DP_NextObjectId(void)
 {
   return (DPID)InterlockedIncrement( &kludgePlayerGroupId );
@@ -574,14 +550,58 @@ static HRESULT WINAPI IDirectPlay4AImpl_QueryInterface( IDirectPlay4A *iface, RE
         void **ppv )
 {
     IDirectPlayImpl *This = impl_from_IDirectPlay4A( iface );
-    return DP_QueryInterface( This, riid, ppv );
+    return IDirectPlayX_QueryInterface( &This->IDirectPlay4_iface, riid, ppv );
 }
 
 static HRESULT WINAPI IDirectPlay4Impl_QueryInterface( IDirectPlay4 *iface, REFIID riid,
         void **ppv )
 {
     IDirectPlayImpl *This = impl_from_IDirectPlay4( iface );
-    return DP_QueryInterface( This, riid, ppv );
+
+    if ( IsEqualGUID( &IID_IUnknown, riid ) )
+    {
+        TRACE( "(%p)->(IID_IUnknown %p)\n", This, ppv );
+        *ppv = &This->IDirectPlay4A_iface;
+    }
+    else if ( IsEqualGUID( &IID_IDirectPlay2A, riid ) )
+    {
+        TRACE( "(%p)->(IID_IDirectPlay2A %p)\n", This, ppv );
+        *ppv = &This->IDirectPlay4A_iface;
+    }
+    else if ( IsEqualGUID( &IID_IDirectPlay2, riid ) )
+    {
+        TRACE( "(%p)->(IID_IDirectPlay2 %p)\n", This, ppv );
+        *ppv = &This->IDirectPlay4_iface;
+    }
+    else if ( IsEqualGUID( &IID_IDirectPlay3A, riid ) )
+    {
+        TRACE( "(%p)->(IID_IDirectPlay3A %p)\n", This, ppv );
+        *ppv = &This->IDirectPlay4A_iface;
+    }
+    else if ( IsEqualGUID( &IID_IDirectPlay3, riid ) )
+    {
+        TRACE( "(%p)->(IID_IDirectPlay3 %p)\n", This, ppv );
+        *ppv = &This->IDirectPlay4_iface;
+    }
+    else if ( IsEqualGUID( &IID_IDirectPlay4A, riid ) )
+    {
+        TRACE( "(%p)->(IID_IDirectPlay4A %p)\n", This, ppv );
+        *ppv = &This->IDirectPlay4A_iface;
+    }
+    else if ( IsEqualGUID( &IID_IDirectPlay4, riid ) )
+    {
+        TRACE( "(%p)->(IID_IDirectPlay4 %p)\n", This, ppv );
+        *ppv = &This->IDirectPlay4_iface;
+    }
+    else
+    {
+        WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
+        *ppv = NULL;
+        return E_NOINTERFACE;
+    }
+
+    IUnknown_AddRef((IUnknown*)*ppv);
+    return S_OK;
 }
 
 static ULONG WINAPI IDirectPlay4AImpl_AddRef(IDirectPlay4A *iface)




More information about the wine-cvs mailing list