Browse Source

engine: network: fix address comparator

pull/2/head
Alibek Omarov 2 years ago
parent
commit
f3400c983e
  1. 38
      engine/common/net_ws.c

38
engine/common/net_ws.c

@ -940,37 +940,53 @@ qboolean NET_CompareAdr( const netadr_t a, const netadr_t b ) @@ -940,37 +940,53 @@ qboolean NET_CompareAdr( const netadr_t a, const netadr_t b )
NET_CompareAdrSort
Network address sorting comparator
guaranteed to return -1, 0 or 1
====================
*/
int NET_CompareAdrSort( const void *_a, const void *_b )
{
const netadr_t *a = _a;
const netadr_t *b = _b;
int portdiff;
const netadr_t *a = _a, *b = _b;
int porta, portb, portdiff, addrdiff;
if( a->type6 != b->type6 )
return (int)a->type6 - (int)b->type6;
portdiff = (int)a->port - (int)b->port;
return bound( -1, (int)a->type6 - (int)b->type6, 1 );
porta = ntohs( a->port );
portb = ntohs( b->port );
if( porta < portb )
portdiff = -1;
else if( porta > portb )
portdiff = 1;
else
portdiff = 0;
switch( a->type6 )
{
case NA_IP6:
return NET_NetadrIP6Compare( a, b );
if(( addrdiff = NET_NetadrIP6Compare( a, b )))
return addrdiff;
// fallthrough
case NA_MULTICAST_IP6:
return portdiff;
}
// don't check for full type earlier, as it's value depends on v6 address
if( a->type != b->type )
return (int)a->type - (int)b->type;
return bound( -1, (int)a->type - (int)b->type, 1 );
switch( a->type )
{
case NA_IP:
return memcmp( a->ip, b->ip, sizeof( a->ip ));
case NA_IPX:
return memcmp( a->ipx, b->ipx, sizeof( a->ipx ));
if(( addrdiff = memcmp( a->ip, b->ip, sizeof( a->ipx ))))
return addrdiff;
// fallthrough
case NA_BROADCAST:
return portdiff;
case NA_IPX:
if(( addrdiff = memcmp( a->ipx, b->ipx, sizeof( a->ipx ))))
return addrdiff;
// fallthrough
case NA_BROADCAST_IPX:
return portdiff;
}

Loading…
Cancel
Save