* net.cc (cygwin_getaddrinfo): Fix value of hint->ai_addrlen on 64 bit.

Explain why.
This commit is contained in:
Corinna Vinschen 2014-06-23 12:35:31 +00:00
parent 9c54570beb
commit 4ea38ac7ef
2 changed files with 15 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2014-06-23 Corinna Vinschen <corinna@vinschen.de>
* net.cc (cygwin_getaddrinfo): Fix value of hint->ai_addrlen on 64 bit.
Explain why.
2014-06-23 Corinna Vinschen <corinna@vinschen.de>
* environ.cc (regopt): Allocate small local buffer to avoid copying

View File

@ -3366,6 +3366,11 @@ cygwin_getaddrinfo (const char *hostname, const char *servname,
/* sizeof addrinfo == sizeof addrinfoW */
memcpy (&whints, hints, sizeof whints);
whints.ai_flags &= ~AI_IDN_MASK;
#ifdef __x86_64__
/* ai_addrlen is socklen_t (4 bytes) in POSIX but size_t (8 bytes) in
Winsock. Sert upper 4 bytes explicitely to 0 to avoid EAI_FAIL. */
whints.ai_addrlen &= UINT32_MAX;
#endif
/* AI_ADDRCONFIG is not supported prior to Vista. Rather it's
the default and only possible setting.
On Vista, the default behaviour is as if AI_ADDRCONFIG is set,
@ -3402,6 +3407,11 @@ cygwin_getaddrinfo (const char *hostname, const char *servname,
/* sizeof addrinfo == sizeof addrinfoW */
memcpy (&whints, hints, sizeof whints);
whints.ai_family = AF_INET;
#ifdef __x86_64__
/* ai_addrlen is socklen_t (4 bytes) in POSIX but size_t (8 bytes) in
Winsock. Sert upper 4 bytes explicitely to 0 to avoid EAI_FAIL. */
whints.ai_addrlen &= UINT32_MAX;
#endif
int ret2 = w32_to_gai_err (GetAddrInfoW (whost, wserv, &whints, &wres));
if (!ret2)
{