Module: wine Branch: master Commit: b80ab3357168123c3cfb35082159c491973f1474 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b80ab3357168123c3cfb350821...
Author: Michael Stefaniuc mstefani@redhat.de Date: Thu Sep 5 00:01:20 2013 +0200
dplayx: Simplify the creation of an IDirectPlaySPImpl object.
---
dlls/dplayx/dplay.c | 4 +-- dlls/dplayx/dplay_global.h | 2 +- dlls/dplayx/dplaysp.c | 55 ++++++++++++++++--------------------------- 3 files changed, 23 insertions(+), 38 deletions(-)
diff --git a/dlls/dplayx/dplay.c b/dlls/dplayx/dplay.c index 94ba844..20899d5 100644 --- a/dlls/dplayx/dplay.c +++ b/dlls/dplayx/dplay.c @@ -173,9 +173,7 @@ static BOOL DP_CreateDirectPlay2( LPVOID lpDP ) This->dp2->spData.lpCB->dwVersion = DPSP_MAJORVERSION;
/* This is the pointer to the service provider */ - if( FAILED( DPSP_CreateInterface( &IID_IDirectPlaySP, - (LPVOID*)&This->dp2->spData.lpISP, This ) ) - ) + if ( FAILED( dplaysp_create( &IID_IDirectPlaySP, (void**)&This->dp2->spData.lpISP, This ) ) ) { /* FIXME: Memory leak */ return FALSE; diff --git a/dlls/dplayx/dplay_global.h b/dlls/dplayx/dplay_global.h index dca6396..7def46b 100644 --- a/dlls/dplayx/dplay_global.h +++ b/dlls/dplayx/dplay_global.h @@ -208,7 +208,7 @@ extern LPVOID DPSP_CreateSPPlayerData(void) DECLSPEC_HIDDEN;
extern HRESULT dplay_create( REFIID riid, void **ppv ) DECLSPEC_HIDDEN; extern HRESULT dplobby_create( REFIID riid, void **ppv ) DECLSPEC_HIDDEN; -extern HRESULT DPSP_CreateInterface( REFIID riid, void **ppvObj, IDirectPlayImpl *dp ) DECLSPEC_HIDDEN; +extern HRESULT dplaysp_create( REFIID riid, void **ppv, IDirectPlayImpl *dp ) DECLSPEC_HIDDEN; extern HRESULT dplobbysp_create( REFIID riid, void **ppv, IDirectPlayImpl *dp ) DECLSPEC_HIDDEN;
#endif /* __WINE_DPLAY_GLOBAL_INCLUDED */ diff --git a/dlls/dplayx/dplaysp.c b/dlls/dplayx/dplaysp.c index e8269df..25cb7c4 100644 --- a/dlls/dplayx/dplaysp.c +++ b/dlls/dplayx/dplaysp.c @@ -44,9 +44,6 @@ typedef struct IDirectPlaySPImpl IDirectPlayImpl *dplay; /* FIXME: This should perhaps be iface not impl */ } IDirectPlaySPImpl;
-/* Forward declaration of virtual tables */ -static const IDirectPlaySPVtbl directPlaySPVT; - /* This structure is passed to the DP object for safe keeping */ typedef struct tagDP_SPPLAYERDATA { @@ -57,37 +54,6 @@ typedef struct tagDP_SPPLAYERDATA DWORD dwPlayerRemoteDataSize; } DP_SPPLAYERDATA, *LPDP_SPPLAYERDATA;
-/* Create the SP interface */ -HRESULT DPSP_CreateInterface( REFIID riid, void **ppvObj, IDirectPlayImpl *dp ) -{ - TRACE( " for %s\n", debugstr_guid( riid ) ); - - *ppvObj = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, - sizeof( IDirectPlaySPImpl ) ); - - if( *ppvObj == NULL ) - { - return DPERR_OUTOFMEMORY; - } - - if( IsEqualGUID( &IID_IDirectPlaySP, riid ) ) - { - IDirectPlaySPImpl *This = *ppvObj; - This->IDirectPlaySP_iface.lpVtbl = &directPlaySPVT; - This->dplay = dp; - } - else - { - /* Unsupported interface */ - HeapFree( GetProcessHeap(), 0, *ppvObj ); - *ppvObj = NULL; - - return E_NOINTERFACE; - } - - IDirectPlaySP_AddRef( (LPDIRECTPLAYSP)*ppvObj ); - return S_OK; -}
static inline IDirectPlaySPImpl *impl_from_IDirectPlaySP( IDirectPlaySP *iface ) { @@ -717,6 +683,27 @@ static const IDirectPlaySPVtbl directPlaySPVT = IDirectPlaySPImpl_SendComplete };
+HRESULT dplaysp_create( REFIID riid, void **ppv, IDirectPlayImpl *dp ) +{ + IDirectPlaySPImpl *obj; + HRESULT hr; + + TRACE( "(%s, %p)\n", debugstr_guid( riid ), ppv ); + + *ppv = NULL; + obj = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof( *obj ) ); + if ( !obj ) + return DPERR_OUTOFMEMORY; + + obj->IDirectPlaySP_iface.lpVtbl = &directPlaySPVT; + obj->ref = 1; + obj->dplay = dp; + + hr = IDirectPlaySP_QueryInterface( &obj->IDirectPlaySP_iface, riid, ppv ); + IDirectPlaySP_Release( &obj->IDirectPlaySP_iface ); + + return hr; +}
/* DP external interfaces to call into DPSP interface */