dplayx: Merge the IDirectPlay4_DeleteGroupFromGroup helper.

This commit is contained in:
Michael Stefaniuc 2013-03-29 17:00:34 +01:00 committed by Alexandre Julliard
parent 684a666d23
commit db97f14f4b
1 changed files with 37 additions and 59 deletions

View File

@ -109,8 +109,6 @@ static HRESULT DP_IF_CreateGroupInGroup
static HRESULT DP_IF_AddPlayerToGroup static HRESULT DP_IF_AddPlayerToGroup
( IDirectPlay2Impl* This, LPVOID lpMsgHdr, DPID idGroup, ( IDirectPlay2Impl* This, LPVOID lpMsgHdr, DPID idGroup,
DPID idPlayer, BOOL bAnsi ); DPID idPlayer, BOOL bAnsi );
static HRESULT DP_IF_DeleteGroupFromGroup
( IDirectPlay3Impl* This, DPID idParentGroup, DPID idGroup );
static HRESULT DP_SetSessionDesc static HRESULT DP_SetSessionDesc
( IDirectPlay2Impl* This, LPCDPSESSIONDESC2 lpSessDesc, ( IDirectPlay2Impl* This, LPCDPSESSIONDESC2 lpSessDesc,
DWORD dwFlags, BOOL bInitial, BOOL bAnsi ); DWORD dwFlags, BOOL bInitial, BOOL bAnsi );
@ -1500,14 +1498,9 @@ cbRemoveGroupOrPlayer(
if( dwPlayerType == DPPLAYERTYPE_GROUP ) if( dwPlayerType == DPPLAYERTYPE_GROUP )
{ {
if( FAILED( DP_IF_DeleteGroupFromGroup( lpCtxt->This, lpCtxt->idGroup, if ( FAILED( IDirectPlayX_DeleteGroupFromGroup( &lpCtxt->This->IDirectPlay4_iface,
dpId ) lpCtxt->idGroup, dpId ) ) )
) ERR( "Unable to delete group 0x%08x from group 0x%08x\n", dpId, lpCtxt->idGroup );
)
{
ERR( "Unable to delete group 0x%08x from group 0x%08x\n",
dpId, lpCtxt->idGroup );
}
} }
else if ( FAILED( IDirectPlayX_DeletePlayerFromGroup( &lpCtxt->This->IDirectPlay4_iface, else if ( FAILED( IDirectPlayX_DeletePlayerFromGroup( &lpCtxt->This->IDirectPlay4_iface,
lpCtxt->idGroup, dpId ) ) ) lpCtxt->idGroup, dpId ) ) )
@ -1544,13 +1537,8 @@ static HRESULT DP_IF_DestroyGroup
cbRemoveGroupOrPlayer, (LPVOID)&context, 0, bAnsi ); cbRemoveGroupOrPlayer, (LPVOID)&context, 0, bAnsi );
/* Remove this group from the parent group - if it has one */ /* Remove this group from the parent group - if it has one */
if( ( idGroup != DPID_SYSTEM_GROUP ) && if( ( idGroup != DPID_SYSTEM_GROUP ) && ( lpGData->parent != DPID_SYSTEM_GROUP ) )
( lpGData->parent != DPID_SYSTEM_GROUP ) IDirectPlayX_DeleteGroupFromGroup( &This->IDirectPlay4_iface, lpGData->parent, idGroup );
)
{
DP_IF_DeleteGroupFromGroup( (IDirectPlay3Impl*)This, lpGData->parent,
idGroup );
}
/* Now delete this group data and list from the system group */ /* Now delete this group data and list from the system group */
DP_DeleteGroup( This, idGroup ); DP_DeleteGroup( This, idGroup );
@ -3136,52 +3124,42 @@ static HRESULT WINAPI DirectPlay3WImpl_CreateGroupInGroup
dwFlags, FALSE ); dwFlags, FALSE );
} }
static HRESULT DP_IF_DeleteGroupFromGroup static HRESULT WINAPI IDirectPlay4AImpl_DeleteGroupFromGroup( IDirectPlay4A *iface, DPID parent,
( IDirectPlay3Impl* This, DPID idParentGroup, DPID idGroup ) DPID group )
{ {
lpGroupList lpGList; IDirectPlayImpl *This = impl_from_IDirectPlay4A( iface );
lpGroupData lpGParentData; return IDirectPlayX_DeleteGroupFromGroup( &This->IDirectPlay4_iface, parent, group );
TRACE("(%p)->(0x%08x,0x%08x)\n", This, idParentGroup, idGroup );
/* Is the parent group valid? */
if( ( lpGParentData = DP_FindAnyGroup( (IDirectPlay2AImpl*)This, idParentGroup ) ) == NULL )
{
return DPERR_INVALIDGROUP;
}
/* Remove the group from the parent group queue */
DPQ_REMOVE_ENTRY( lpGParentData->groups, groups, lpGData->dpid, ==, idGroup, lpGList );
if( lpGList == NULL )
{
return DPERR_INVALIDGROUP;
}
/* Decrement the ref count */
lpGList->lpGData->uRef--;
/* Free up the list item */
HeapFree( GetProcessHeap(), 0, lpGList );
/* Should send a DELETEGROUPFROMGROUP message */
FIXME( "message not sent\n" );
return DP_OK;
} }
static HRESULT WINAPI IDirectPlay4AImpl_DeleteGroupFromGroup( IDirectPlay4A *iface, static HRESULT WINAPI IDirectPlay4Impl_DeleteGroupFromGroup( IDirectPlay4 *iface, DPID parent,
DPID idParentGroup, DPID idGroup ) DPID group )
{ {
IDirectPlayImpl *This = impl_from_IDirectPlay4A( iface ); IDirectPlayImpl *This = impl_from_IDirectPlay4( iface );
return DP_IF_DeleteGroupFromGroup( This, idParentGroup, idGroup ); lpGroupList glist;
} lpGroupData parentdata;
static HRESULT WINAPI DirectPlay3WImpl_DeleteGroupFromGroup TRACE("(%p)->(0x%08x,0x%08x)\n", This, parent, group );
( LPDIRECTPLAY3 iface, DPID idParentGroup, DPID idGroup )
{ /* Is the parent group valid? */
IDirectPlay3Impl *This = (IDirectPlay3Impl *)iface; if ( ( parentdata = DP_FindAnyGroup(This, parent ) ) == NULL )
return DP_IF_DeleteGroupFromGroup( This, idParentGroup, idGroup ); return DPERR_INVALIDGROUP;
/* Remove the group from the parent group queue */
DPQ_REMOVE_ENTRY( parentdata->groups, groups, lpGData->dpid, ==, group, glist );
if ( glist == NULL )
return DPERR_INVALIDGROUP;
/* Decrement the ref count */
glist->lpGData->uRef--;
/* Free up the list item */
HeapFree( GetProcessHeap(), 0, glist );
/* Should send a DELETEGROUPFROMGROUP message */
FIXME( "message not sent\n" );
return DP_OK;
} }
static BOOL DP_BuildSPCompoundAddr( LPGUID lpcSpGuid, LPVOID* lplpAddrBuf, static BOOL DP_BuildSPCompoundAddr( LPGUID lpcSpGuid, LPVOID* lplpAddrBuf,
@ -4421,7 +4399,7 @@ static const IDirectPlay4Vtbl dp4_vt =
XCAST(SetSessionDesc)DirectPlay2WImpl_SetSessionDesc, XCAST(SetSessionDesc)DirectPlay2WImpl_SetSessionDesc,
IDirectPlay4Impl_AddGroupToGroup, IDirectPlay4Impl_AddGroupToGroup,
XCAST(CreateGroupInGroup)DirectPlay3WImpl_CreateGroupInGroup, XCAST(CreateGroupInGroup)DirectPlay3WImpl_CreateGroupInGroup,
XCAST(DeleteGroupFromGroup)DirectPlay3WImpl_DeleteGroupFromGroup, IDirectPlay4Impl_DeleteGroupFromGroup,
IDirectPlay4Impl_EnumConnections, IDirectPlay4Impl_EnumConnections,
XCAST(EnumGroupsInGroup)DirectPlay3WImpl_EnumGroupsInGroup, XCAST(EnumGroupsInGroup)DirectPlay3WImpl_EnumGroupsInGroup,
IDirectPlay4Impl_GetGroupConnectionSettings, IDirectPlay4Impl_GetGroupConnectionSettings,