ws2_32: Use the routing table information for gethostbyname('self') if the magic IP would otherwise be returned.

Vitaliy Margolen wine-devel at kievinfo.com
Sat Oct 10 15:52:48 CDT 2009


Erich Hoover wrote:
> Real Name:
>     Erich Hoover
> Description:
>     If an application calls gethostbyname on it's own hostname then it
> expects an IP to be returned for each interface, in order of the
> routing priority (see MS Knowledge Base article #160215).  The
> attached patch first checks to see if the gethostbyname request
> resolved to a loopback address (which currently gets replaced by the
> magic IP).  If the magic IP would have been returned then it uses the
> routing table to build the list of IP addresses and properly sorts
> those addresses from highest routing priority to lowest routing
> priority (lowest metric to highest metric).
> Changelog:
>     ws2_32: Use the routing table information for
> gethostbyname('self') if the magic IP would otherwise be returned.

Thanks for the patch, however there are few issues with it.

Why do you return a list of IP addresses from WS2_get_local_ips if you need
only one? Just get the one with the lowest metric and return it.

I think it would be better

> +    adapters = HeapAlloc(GetProcessHeap(),0,adap_size);
> +    routes = HeapAlloc(GetProcessHeap(),0,route_size);
> +    route_addrs = HeapAlloc(GetProcessHeap(),0,0); /* HeapReAlloc doesn't work on NULL */
Here and everywhere else please put space before comas to follow the file's
formatting.

> +    if (route_addrs != NULL)
> +        HeapFree(GetProcessHeap(), 0, route_addrs);
> +    if (adapters != NULL)
> +        HeapFree(GetProcessHeap(), 0, adapters);
> +    if (routes != NULL)
> +        HeapFree(GetProcessHeap(), 0, routes);
You do not need to check pointers for NULL before freeing them.

Vitaliy.



More information about the wine-devel mailing list