dplayx: Merge the IDirectPlay4_GetGroupData helper.

This commit is contained in:
Michael Stefaniuc 2013-03-29 16:54:00 +01:00 committed by Alexandre Julliard
parent 7cd17803d5
commit 4ccd8720d5
1 changed files with 38 additions and 56 deletions

View File

@ -86,9 +86,6 @@ static HRESULT DP_IF_DestroyGroup
( IDirectPlay2Impl* This, LPVOID lpMsgHdr, DPID idGroup, BOOL bAnsi ); ( IDirectPlay2Impl* This, LPVOID lpMsgHdr, DPID idGroup, BOOL bAnsi );
static HRESULT DP_IF_DestroyPlayer static HRESULT DP_IF_DestroyPlayer
( IDirectPlay2Impl* This, LPVOID lpMsgHdr, DPID idPlayer, BOOL bAnsi ); ( IDirectPlay2Impl* This, LPVOID lpMsgHdr, DPID idPlayer, BOOL bAnsi );
static HRESULT DP_IF_GetGroupData
( IDirectPlay2Impl* This, DPID idGroup, LPVOID lpData,
LPDWORD lpdwDataSize, DWORD dwFlags, BOOL bAnsi );
static HRESULT DP_IF_GetGroupName static HRESULT DP_IF_GetGroupName
( IDirectPlay2Impl* This, DPID idGroup, LPVOID lpData, ( IDirectPlay2Impl* This, DPID idGroup, LPVOID lpData,
LPDWORD lpdwDataSize, BOOL bAnsi ); LPDWORD lpdwDataSize, BOOL bAnsi );
@ -2113,65 +2110,50 @@ static HRESULT WINAPI DirectPlay2WImpl_GetCaps
return DP_IF_GetCaps( This, lpDPCaps, dwFlags ); return DP_IF_GetCaps( This, lpDPCaps, dwFlags );
} }
static HRESULT DP_IF_GetGroupData static HRESULT WINAPI IDirectPlay4AImpl_GetGroupData( IDirectPlay4A *iface, DPID group,
( IDirectPlay2Impl* This, DPID idGroup, LPVOID lpData, void *data, DWORD *size, DWORD flags )
LPDWORD lpdwDataSize, DWORD dwFlags, BOOL bAnsi )
{ {
lpGroupData lpGData; IDirectPlayImpl *This = impl_from_IDirectPlay4A( iface );
DWORD dwRequiredBufferSize; return IDirectPlayX_GetGroupData( &This->IDirectPlay4_iface, group, data, size, flags );
LPVOID lpCopyDataFrom;
TRACE( "(%p)->(0x%08x,%p,%p,0x%08x,%u)\n",
This, idGroup, lpData, lpdwDataSize, dwFlags, bAnsi );
if( ( lpGData = DP_FindAnyGroup( This, idGroup ) ) == NULL )
{
return DPERR_INVALIDGROUP;
} }
/* How much buffer is required? */ static HRESULT WINAPI IDirectPlay4Impl_GetGroupData( IDirectPlay4 *iface, DPID group,
if( dwFlags & DPSET_LOCAL ) void *data, DWORD *size, DWORD flags )
{ {
dwRequiredBufferSize = lpGData->dwLocalDataSize; IDirectPlayImpl *This = impl_from_IDirectPlay4( iface );
lpCopyDataFrom = lpGData->lpLocalData; lpGroupData gdata;
DWORD bufsize;
void *src;
TRACE( "(%p)->(0x%08x,%p,%p,0x%08x)\n", This, group, data, size, flags );
if ( ( gdata = DP_FindAnyGroup( This, group ) ) == NULL )
return DPERR_INVALIDGROUP;
/* How much buffer is required? */
if ( flags & DPSET_LOCAL )
{
bufsize = gdata->dwLocalDataSize;
src = gdata->lpLocalData;
} }
else else
{ {
dwRequiredBufferSize = lpGData->dwRemoteDataSize; bufsize = gdata->dwRemoteDataSize;
lpCopyDataFrom = lpGData->lpRemoteData; src = gdata->lpRemoteData;
} }
/* Is the user requesting to know how big a buffer is required? */ /* Is the user requesting to know how big a buffer is required? */
if( ( lpData == NULL ) || if ( !data || *size < bufsize )
( *lpdwDataSize < dwRequiredBufferSize )
)
{ {
*lpdwDataSize = dwRequiredBufferSize; *size = bufsize;
return DPERR_BUFFERTOOSMALL; return DPERR_BUFFERTOOSMALL;
} }
CopyMemory( lpData, lpCopyDataFrom, dwRequiredBufferSize ); CopyMemory( data, src, bufsize );
return DP_OK; return DP_OK;
} }
static HRESULT WINAPI IDirectPlay4AImpl_GetGroupData( IDirectPlay4A *iface, DPID idGroup,
void *lpData, DWORD *lpdwDataSize, DWORD dwFlags )
{
IDirectPlayImpl *This = impl_from_IDirectPlay4A( iface );
return DP_IF_GetGroupData( This, idGroup, lpData, lpdwDataSize,
dwFlags, TRUE );
}
static HRESULT WINAPI DirectPlay2WImpl_GetGroupData
( LPDIRECTPLAY2 iface, DPID idGroup, LPVOID lpData,
LPDWORD lpdwDataSize, DWORD dwFlags )
{
IDirectPlay2Impl *This = (IDirectPlay2Impl *)iface;
return DP_IF_GetGroupData( This, idGroup, lpData, lpdwDataSize,
dwFlags, FALSE );
}
static HRESULT DP_IF_GetGroupName static HRESULT DP_IF_GetGroupName
( IDirectPlay2Impl* This, DPID idGroup, LPVOID lpData, ( IDirectPlay2Impl* This, DPID idGroup, LPVOID lpData,
LPDWORD lpdwDataSize, BOOL bAnsi ) LPDWORD lpdwDataSize, BOOL bAnsi )
@ -4527,7 +4509,7 @@ static const IDirectPlay4Vtbl dp4_vt =
IDirectPlay4Impl_EnumPlayers, IDirectPlay4Impl_EnumPlayers,
XCAST(EnumSessions)DirectPlay2WImpl_EnumSessions, XCAST(EnumSessions)DirectPlay2WImpl_EnumSessions,
XCAST(GetCaps)DirectPlay2WImpl_GetCaps, XCAST(GetCaps)DirectPlay2WImpl_GetCaps,
XCAST(GetGroupData)DirectPlay2WImpl_GetGroupData, IDirectPlay4Impl_GetGroupData,
XCAST(GetGroupName)DirectPlay2WImpl_GetGroupName, XCAST(GetGroupName)DirectPlay2WImpl_GetGroupName,
IDirectPlay4Impl_GetMessageCount, IDirectPlay4Impl_GetMessageCount,
IDirectPlay4Impl_GetPlayerAddress, IDirectPlay4Impl_GetPlayerAddress,