From: Anton Baskanov baskanov@gmail.com
--- dlls/dplayx/dplay.c | 28 +++++++++++++++++++--------- dlls/dplayx/tests/dplayx.c | 7 +++---- 2 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/dlls/dplayx/dplay.c b/dlls/dplayx/dplay.c index b670935771a..ba40d742bc2 100644 --- a/dlls/dplayx/dplay.c +++ b/dlls/dplayx/dplay.c @@ -2361,18 +2361,28 @@ static HRESULT DP_IF_EnumGroupPlayers( IDirectPlayImpl *This, DPID group, GUID * /* Walk the players in this group */ for( plist = DPQ_FIRST( gdata->players ); plist; plist = DPQ_NEXT( plist->players ) ) { + DWORD playerFlags; + /* We do not enum the name server or app server as they are of no * consequence to the end user. */ - if ( !(plist->lpPData->dwFlags & DPLAYI_PLAYER_SYSPLAYER) ) - { - /* FIXME: Need to add stuff for flags checking */ - if ( !enumplayercb( plist->lpPData->dpid, DPPLAYERTYPE_PLAYER, - ansi ? plist->lpPData->nameA : plist->lpPData->name, - plist->lpPData->dwFlags, context ) ) - /* User requested break */ - break; - } + if ( plist->lpPData->dwFlags & DPLAYI_PLAYER_SYSPLAYER ) + continue; + + if ( (plist->lpPData->dwFlags & flags) != (flags & ~DPENUMPLAYERS_REMOTE) ) + continue; + if ( (plist->lpPData->dwFlags & DPENUMPLAYERS_LOCAL) && (flags & DPENUMPLAYERS_REMOTE) ) + continue; + + playerFlags = plist->lpPData->dwFlags; + playerFlags &= ~(DPENUMPLAYERS_GROUP | DPENUMPLAYERS_LOCAL | DPENUMPLAYERS_OWNER); + playerFlags |= flags; + + if ( !enumplayercb( plist->lpPData->dpid, DPPLAYERTYPE_PLAYER, + ansi ? plist->lpPData->nameA : plist->lpPData->name, + playerFlags, context ) ) + /* User requested break */ + break; }
LeaveCriticalSection( &This->lock ); diff --git a/dlls/dplayx/tests/dplayx.c b/dlls/dplayx/tests/dplayx.c index 45b65778c9c..42e96cd6c70 100644 --- a/dlls/dplayx/tests/dplayx.c +++ b/dlls/dplayx/tests/dplayx.c @@ -2223,7 +2223,7 @@ static BOOL CALLBACK checkPlayerListCallback( DPID dpid, DWORD playerType, const HRESULT hr;
if ( player->actualCount ) - todo_wine ok_( __FILE__, data->line )( 0, "duplicate player dpid %#lx.\n", dpid ); + ok_( __FILE__, data->line )( 0, "duplicate player dpid %#lx.\n", dpid ); ok_( __FILE__, data->line )( playerType == player->expectedPlayerType, "got player type %lu.\n", playerType ); if ( player->expectedShortName ) @@ -2332,8 +2332,8 @@ static void checkPlayerList_( int line, IDirectPlay4 *dp, ExpectedPlayer *expect hr = IDirectPlayX_EnumPlayers( dp, NULL, checkPlayerListCallback, &data, DPENUMPLAYERS_REMOTE ); ok_( __FILE__, line )( hr == DP_OK, "EnumPlayers() returned %#lx.\n", hr );
- todo_wine ok_( __FILE__, line )( data.actualPlayerCount == data.expectedPlayerCount, "got player count %d.\n", - data.actualPlayerCount ); + ok_( __FILE__, line )( data.actualPlayerCount == data.expectedPlayerCount, "got player count %d.\n", + data.actualPlayerCount ); }
#define check_Open( dp, dpsd, serverDpsd, idRequestExpected, forwardRequestExpected, listenPort, expectedPassword, \ @@ -2399,7 +2399,6 @@ static void check_Open_( int line, IDirectPlay4A *dp, DPSESSIONDESC2 *dpsd, cons .expectedFlags = DPENUMPLAYERS_REMOTE, .expectedPlayerData = expectedPlayerData, .expectedPlayerDataSize = sizeof( expectedPlayerData ), - .flagsTodo = TRUE, }, };