1
0
Fork 0
mirror of synced 2025-03-07 03:53:26 +01:00

wpcap: Call GetAdaptersAddresses() in a loop.

This commit is contained in:
Hans Leidekker 2023-09-04 18:07:24 +02:00 committed by Alexandre Julliard
parent d01e619c7b
commit 80d629acbd

View file

@ -391,18 +391,21 @@ static void free_devices( struct pcap_interface *devs )
static IP_ADAPTER_ADDRESSES *get_adapters( void )
{
DWORD size = 0;
IP_ADAPTER_ADDRESSES *ret;
ULONG err, size = 4096;
IP_ADAPTER_ADDRESSES *tmp, *ret;
ULONG flags = GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_SKIP_DNS_SERVER;
if (GetAdaptersAddresses( AF_UNSPEC, flags, NULL, NULL, &size ) != ERROR_BUFFER_OVERFLOW) return NULL;
if (!(ret = malloc( size ))) return NULL;
if (GetAdaptersAddresses( AF_UNSPEC, flags, NULL, ret, &size ))
err = GetAdaptersAddresses( AF_UNSPEC, flags, NULL, ret, &size );
while (err == ERROR_BUFFER_OVERFLOW)
{
free( ret );
return NULL;
if (!(tmp = realloc( ret, size ))) break;
ret = tmp;
err = GetAdaptersAddresses( AF_UNSPEC, flags, NULL, ret, &size );
}
return ret;
if (err == ERROR_SUCCESS) return ret;
free( ret );
return NULL;
}
static IP_ADAPTER_ADDRESSES *find_adapter( IP_ADAPTER_ADDRESSES *list, const char *name )