Michael Stefaniuc : dplayx: Merge the extra struct into IDirectPlaySPImpl.
Alexandre Julliard
julliard at winehq.org
Thu Sep 5 13:28:19 CDT 2013
Module: wine
Branch: master
Commit: 11756086b4fef4d6769a315b93fd7cf0a1ee0333
URL: http://source.winehq.org/git/wine.git/?a=commit;h=11756086b4fef4d6769a315b93fd7cf0a1ee0333
Author: Michael Stefaniuc <mstefani at redhat.de>
Date: Wed Sep 4 23:59:07 2013 +0200
dplayx: Merge the extra struct into IDirectPlaySPImpl.
---
dlls/dplayx/dplaysp.c | 122 ++++++++++++-------------------------------------
1 files changed, 30 insertions(+), 92 deletions(-)
diff --git a/dlls/dplayx/dplaysp.c b/dlls/dplayx/dplaysp.c
index e8fea40..780834c 100644
--- a/dlls/dplayx/dplaysp.c
+++ b/dlls/dplayx/dplaysp.c
@@ -33,34 +33,16 @@
WINE_DEFAULT_DEBUG_CHANNEL(dplay);
-/* Prototypes */
-static BOOL DPSP_CreateDirectPlaySP( void *lpSP, IDirectPlayImpl *dp );
-static BOOL DPSP_DestroyDirectPlaySP( LPVOID lpSP );
-
-/* Predefine the interface */
-typedef struct IDirectPlaySPImpl IDirectPlaySPImpl;
-
-typedef struct tagDirectPlaySPData
-{
- LPVOID lpSpRemoteData;
- DWORD dwSpRemoteDataSize; /* Size of data pointed to by lpSpRemoteData */
-
- LPVOID lpSpLocalData;
- DWORD dwSpLocalDataSize; /* Size of data pointed to by lpSpLocalData */
-
- IDirectPlayImpl *dplay; /* FIXME: This should perhaps be iface not impl */
-
-} DirectPlaySPData;
-
-#define DPSP_IMPL_FIELDS \
- DirectPlaySPData* sp;
-
-struct IDirectPlaySPImpl
+typedef struct IDirectPlaySPImpl
{
const IDirectPlaySPVtbl *lpVtbl;
LONG ref;
- DPSP_IMPL_FIELDS
-};
+ void *remote_data;
+ DWORD remote_data_size;
+ void *local_data;
+ DWORD local_data_size;
+ IDirectPlayImpl *dplay; /* FIXME: This should perhaps be iface not impl */
+} IDirectPlaySPImpl;
/* Forward declaration of virtual tables */
static const IDirectPlaySPVtbl directPlaySPVT;
@@ -92,6 +74,7 @@ HRESULT DPSP_CreateInterface( REFIID riid, void **ppvObj, IDirectPlayImpl *dp )
{
IDirectPlaySPImpl *This = *ppvObj;
This->lpVtbl = &directPlaySPVT;
+ This->dplay = dp;
}
else
{
@@ -102,49 +85,8 @@ HRESULT DPSP_CreateInterface( REFIID riid, void **ppvObj, IDirectPlayImpl *dp )
return E_NOINTERFACE;
}
- /* Initialize it */
- if( DPSP_CreateDirectPlaySP( *ppvObj, dp ) )
- {
- IDirectPlaySP_AddRef( (LPDIRECTPLAYSP)*ppvObj );
- return S_OK;
- }
-
- /* Initialize failed, destroy it */
- DPSP_DestroyDirectPlaySP( *ppvObj );
-
- HeapFree( GetProcessHeap(), 0, *ppvObj );
- *ppvObj = NULL;
-
- return DPERR_NOMEMORY;
-}
-
-static BOOL DPSP_CreateDirectPlaySP( void *lpSP, IDirectPlayImpl *dp )
-{
- IDirectPlaySPImpl *This = lpSP;
-
- This->sp = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof( *(This->sp) ) );
-
- if ( This->sp == NULL )
- {
- return FALSE;
- }
-
- This->sp->dplay = dp;
-
- return TRUE;
-}
-
-static BOOL DPSP_DestroyDirectPlaySP( LPVOID lpSP )
-{
- IDirectPlaySPImpl *This = lpSP;
-
- HeapFree( GetProcessHeap(), 0, This->sp->lpSpRemoteData );
- HeapFree( GetProcessHeap(), 0, This->sp->lpSpLocalData );
-
- /* FIXME: Need to delete player queue */
-
- HeapFree( GetProcessHeap(), 0, This->sp );
- return TRUE;
+ IDirectPlaySP_AddRef( (LPDIRECTPLAYSP)*ppvObj );
+ return S_OK;
}
static inline IDirectPlaySPImpl *impl_from_IDirectPlaySP( IDirectPlaySP *iface )
@@ -188,7 +130,8 @@ static ULONG WINAPI IDirectPlaySPImpl_Release( IDirectPlaySP *iface )
if( !ref )
{
- DPSP_DestroyDirectPlaySP( This );
+ HeapFree( GetProcessHeap(), 0, This->remote_data );
+ HeapFree( GetProcessHeap(), 0, This->local_data );
HeapFree( GetProcessHeap(), 0, This );
}
@@ -269,7 +212,7 @@ static HRESULT WINAPI IDirectPlaySPImpl_GetSPPlayerData( IDirectPlaySP *iface, D
TRACE( "(%p)->(0x%08x,%p,%p,0x%08x)\n",
This, idPlayer, lplpData, lpdwDataSize, dwFlags );
- hr = DP_GetSPPlayerData( This->sp->dplay, idPlayer, (LPVOID*)&lpPlayerData );
+ hr = DP_GetSPPlayerData( This->dplay, idPlayer, (void**)&lpPlayerData );
if( FAILED(hr) )
{
@@ -336,9 +279,8 @@ static HRESULT WINAPI IDirectPlaySPImpl_HandleMessage( IDirectPlaySP *iface, voi
data.dwMessageSize = 0;
/* Pass this message to the dplay interface to handle */
- hr = DP_HandleMessage( This->sp->dplay, lpMessageBody, dwMessageBodySize,
- lpMessageHeader, wCommandId, wVersion,
- &data.lpMessage, &data.dwMessageSize );
+ hr = DP_HandleMessage( This->dplay, lpMessageBody, dwMessageBodySize, lpMessageHeader,
+ wCommandId, wVersion, &data.lpMessage, &data.dwMessageSize );
if( FAILED(hr) )
{
@@ -352,7 +294,7 @@ static HRESULT WINAPI IDirectPlaySPImpl_HandleMessage( IDirectPlaySP *iface, voi
data.idNameServer = 0;
data.lpISP = iface;
- hr = (This->sp->dplay->dp2->spData.lpCB->Reply)( &data );
+ hr = This->dplay->dp2->spData.lpCB->Reply( &data );
if( FAILED(hr) )
{
@@ -616,7 +558,7 @@ static HRESULT WINAPI IDirectPlaySPImpl_SetSPPlayerData( IDirectPlaySP *iface, D
TRACE( "(%p)->(0x%08x,%p,0x%08x,0x%08x)\n", This, idPlayer, lpData, dwDataSize, dwFlags );
- hr = DP_GetSPPlayerData( This->sp->dplay, idPlayer, (LPVOID*)&lpPlayerEntry );
+ hr = DP_GetSPPlayerData( This->dplay, idPlayer, (void**)&lpPlayerEntry );
if( FAILED(hr) )
{
/* Player must not exist */
@@ -637,7 +579,7 @@ static HRESULT WINAPI IDirectPlaySPImpl_SetSPPlayerData( IDirectPlaySP *iface, D
lpPlayerEntry->dwPlayerRemoteDataSize = dwDataSize;
}
- hr = DP_SetSPPlayerData( This->sp->dplay, idPlayer, lpPlayerEntry );
+ hr = DP_SetSPPlayerData( This->dplay, idPlayer, lpPlayerEntry );
return hr;
}
@@ -684,23 +626,19 @@ static HRESULT WINAPI IDirectPlaySPImpl_GetSPData( IDirectPlaySP *iface, void **
/* Yes, we're supposed to return a pointer to the memory we have stored! */
if( dwFlags == DPSET_REMOTE )
{
- *lpdwDataSize = This->sp->dwSpRemoteDataSize;
- *lplpData = This->sp->lpSpRemoteData;
+ *lpdwDataSize = This->remote_data_size;
+ *lplpData = This->remote_data;
- if( This->sp->lpSpRemoteData == NULL )
- {
+ if( !This->remote_data )
hr = DPERR_GENERIC;
- }
}
else if( dwFlags == DPSET_LOCAL )
{
- *lpdwDataSize = This->sp->dwSpLocalDataSize;
- *lplpData = This->sp->lpSpLocalData;
+ *lpdwDataSize = This->local_data_size;
+ *lplpData = This->local_data;
- if( This->sp->lpSpLocalData == NULL )
- {
+ if( !This->local_data )
hr = DPERR_GENERIC;
- }
}
return hr;
@@ -737,15 +675,15 @@ static HRESULT WINAPI IDirectPlaySPImpl_SetSPData( IDirectPlaySP *iface, void *l
/* If we have data already allocated, free it and replace it */
if( dwFlags == DPSET_REMOTE )
{
- HeapFree( GetProcessHeap(), 0, This->sp->lpSpRemoteData );
- This->sp->dwSpRemoteDataSize = dwDataSize;
- This->sp->lpSpRemoteData = lpSpData;
+ HeapFree( GetProcessHeap(), 0, This->remote_data );
+ This->remote_data_size = dwDataSize;
+ This->remote_data = lpSpData;
}
else if ( dwFlags == DPSET_LOCAL )
{
- HeapFree( GetProcessHeap(), 0, This->sp->lpSpLocalData );
- This->sp->lpSpLocalData = lpSpData;
- This->sp->dwSpLocalDataSize = dwDataSize;
+ HeapFree( GetProcessHeap(), 0, This->local_data );
+ This->local_data = lpSpData;
+ This->local_data_size = dwDataSize;
}
return DP_OK;
More information about the wine-cvs
mailing list