wininet: Make resolving hostnames thread safe.

Rob Shearman robertshearman at gmail.com
Sat May 24 13:04:14 CDT 2008


2008/5/19 Hans Leidekker <hans at it.vu.nl>:
> @@ -151,7 +158,21 @@ BOOL GetAddress(LPCWSTR lpszServerName, INTERNET_PORT nServerPort,
>      name = HeapAlloc(GetProcessHeap(), 0, sz+1);
>      WideCharToMultiByte( CP_UNIXCP, 0, lpszServerName, len, name, sz, NULL, NULL );
>      name[sz] = 0;
> +
> +#ifdef  HAVE_LINUX_GETHOSTBYNAME_R_6
> +    phe = NULL;
> +    buf = HeapAlloc(GetProcessHeap(), 0, bufsize);
> +    while (buf)
> +    {
> +        int res = gethostbyname_r(name, &hostentry, buf, bufsize, &phe, &locerr);
> +        if (res != ERANGE) break;
> +        bufsize *= 2;
> +        buf = HeapReAlloc(GetProcessHeap(), 0, buf, bufsize);
> +    }
> +    HeapFree(GetProcessHeap(), 0, buf);
> +#else
>      phe = gethostbyname(name);
> +#endif

In the long term it would be better to use getaddrinfo instead of
gethostbyname/gethostbyname_r, but that's too big a change for 1.0.

Rob



More information about the wine-devel mailing list