[PATCH 7/7] dplayx: Simplify the creation of a IDPLobbySPImpl COM object.
Michael Stefaniuc
mstefani at redhat.de
Tue Sep 3 16:24:58 CDT 2013
---
dlls/dplayx/dplay.c | 3 +--
dlls/dplayx/dplay_global.h | 2 +-
dlls/dplayx/lobbysp.c | 56 ++++++++++++++++++----------------------------
3 files changed, 24 insertions(+), 37 deletions(-)
diff --git a/dlls/dplayx/dplay.c b/dlls/dplayx/dplay.c
index 4529c5e..94ba844 100644
--- a/dlls/dplayx/dplay.c
+++ b/dlls/dplayx/dplay.c
@@ -187,8 +187,7 @@ static BOOL DP_CreateDirectPlay2( LPVOID lpDP )
sizeof( *This->dp2->dplspData.lpCB ) );
This->dp2->dplspData.lpCB->dwSize = sizeof( *This->dp2->dplspData.lpCB );
- if( FAILED( DPLSP_CreateInterface( &IID_IDPLobbySP,
- (LPVOID*)&This->dp2->dplspData.lpISP, This ) )
+ if( FAILED( dplobbysp_create( &IID_IDPLobbySP, (void**)&This->dp2->dplspData.lpISP, This ) )
)
{
/* FIXME: Memory leak */
diff --git a/dlls/dplayx/dplay_global.h b/dlls/dplayx/dplay_global.h
index 7fde277..dca6396 100644
--- a/dlls/dplayx/dplay_global.h
+++ b/dlls/dplayx/dplay_global.h
@@ -209,6 +209,6 @@ 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 DPLSP_CreateInterface( REFIID riid, void **ppvObj, 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/lobbysp.c b/dlls/dplayx/lobbysp.c
index 8b0c24c..72198da 100644
--- a/dlls/dplayx/lobbysp.c
+++ b/dlls/dplayx/lobbysp.c
@@ -38,40 +38,6 @@ static inline IDPLobbySPImpl *impl_from_IDPLobbySP(IDPLobbySP *iface)
return CONTAINING_RECORD(iface, IDPLobbySPImpl, IDPLobbySP_iface);
}
-/* Forward declaration of virtual tables */
-static const IDPLobbySPVtbl dpLobbySPVT;
-
-HRESULT DPLSP_CreateInterface( REFIID riid, void **ppvObj, IDirectPlayImpl *dp )
-{
- TRACE( " for %s\n", debugstr_guid( riid ) );
-
- *ppvObj = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
- sizeof( IDPLobbySPImpl ) );
-
- if( *ppvObj == NULL )
- {
- return DPERR_OUTOFMEMORY;
- }
-
- if( IsEqualGUID( &IID_IDPLobbySP, riid ) )
- {
- IDPLobbySPImpl *This = *ppvObj;
- This->IDPLobbySP_iface.lpVtbl = &dpLobbySPVT;
- This->dplay = dp;
- }
- else
- {
- /* Unsupported interface */
- HeapFree( GetProcessHeap(), 0, *ppvObj );
- *ppvObj = NULL;
-
- return E_NOINTERFACE;
- }
-
- IDPLobbySP_AddRef( (LPDPLOBBYSP)*ppvObj );
- return S_OK;
-}
-
static HRESULT WINAPI IDPLobbySPImpl_QueryInterface( IDPLobbySP *iface, REFIID riid,
void **ppv )
{
@@ -260,3 +226,25 @@ static const IDPLobbySPVtbl dpLobbySPVT =
IDPLobbySPImpl_SetSPDataPointer,
IDPLobbySPImpl_StartSession
};
+
+HRESULT dplobbysp_create( REFIID riid, void **ppv, IDirectPlayImpl *dp )
+{
+ IDPLobbySPImpl *obj;
+ HRESULT hr;
+
+ TRACE( "(%s, %p)\n", debugstr_guid( riid ), ppv );
+
+ *ppv = NULL;
+ obj = HeapAlloc( GetProcessHeap(), 0, sizeof( *obj ) );
+ if ( !obj )
+ return DPERR_OUTOFMEMORY;
+
+ obj->IDPLobbySP_iface.lpVtbl = &dpLobbySPVT;
+ obj->ref = 0;
+ obj->dplay = dp;
+
+ hr = IDPLobbySP_QueryInterface( &obj->IDPLobbySP_iface, riid, ppv );
+ IDPLobbySP_Release( &obj->IDPLobbySP_iface );
+
+ return hr;
+}
--
1.8.3.1
More information about the wine-patches
mailing list