Drop supports_all_posix_ai_flags
This commit is contained in:
parent
a759558418
commit
6f560555bd
|
@ -3499,13 +3499,10 @@ cygwin_getaddrinfo (const char *hostname, const char *servname,
|
||||||
Winsock. Sert upper 4 bytes explicitely to 0 to avoid EAI_FAIL. */
|
Winsock. Sert upper 4 bytes explicitely to 0 to avoid EAI_FAIL. */
|
||||||
whints.ai_addrlen &= UINT32_MAX;
|
whints.ai_addrlen &= UINT32_MAX;
|
||||||
#endif
|
#endif
|
||||||
/* AI_ADDRCONFIG is not supported prior to Vista. Rather it's
|
/* On Windows, the default behaviour is as if AI_ADDRCONFIG is set,
|
||||||
the default and only possible setting.
|
|
||||||
On Vista, the default behaviour is as if AI_ADDRCONFIG is set,
|
|
||||||
apparently for performance reasons. To get the POSIX default
|
apparently for performance reasons. To get the POSIX default
|
||||||
behaviour, the AI_ALL flag has to be set. */
|
behaviour, the AI_ALL flag has to be set. */
|
||||||
if (wincap.supports_all_posix_ai_flags ()
|
if (whints.ai_family == PF_UNSPEC
|
||||||
&& whints.ai_family == PF_UNSPEC
|
|
||||||
&& !(whints.ai_flags & AI_ADDRCONFIG))
|
&& !(whints.ai_flags & AI_ADDRCONFIG))
|
||||||
whints.ai_flags |= AI_ALL;
|
whints.ai_flags |= AI_ALL;
|
||||||
}
|
}
|
||||||
|
@ -3529,51 +3526,6 @@ cygwin_getaddrinfo (const char *hostname, const char *servname,
|
||||||
if (!*res)
|
if (!*res)
|
||||||
__leave;
|
__leave;
|
||||||
}
|
}
|
||||||
/* AI_V4MAPPED and AI_ALL are not supported prior to Vista. So, what
|
|
||||||
we do here is to emulate AI_V4MAPPED. If no IPv6 addresses are
|
|
||||||
returned, or the AI_ALL flag is set, we try with AF_INET again, and
|
|
||||||
convert the returned IPv4 addresses into v4-in-v6 entries. This
|
|
||||||
is done in ga_dup if the v4mapped flag is set. */
|
|
||||||
if (!wincap.supports_all_posix_ai_flags ()
|
|
||||||
&& hints
|
|
||||||
&& hints->ai_family == AF_INET6
|
|
||||||
&& (hints->ai_flags & AI_V4MAPPED)
|
|
||||||
&& (ret == EAI_NODATA || ret == EAI_NONAME
|
|
||||||
|| (hints->ai_flags & AI_ALL)))
|
|
||||||
{
|
|
||||||
/* 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)
|
|
||||||
{
|
|
||||||
struct addrinfo *v4res = ga_duplist (wres, true, idn_flags, ret);
|
|
||||||
FreeAddrInfoW (wres);
|
|
||||||
if (!v4res)
|
|
||||||
{
|
|
||||||
if (!ret)
|
|
||||||
cygwin_freeaddrinfo (*res);
|
|
||||||
__leave;
|
|
||||||
}
|
|
||||||
/* If a list of v6 addresses exists, append the v4-in-v6 address
|
|
||||||
list. Otherwise just return the v4-in-v6 address list. */
|
|
||||||
if (!ret)
|
|
||||||
{
|
|
||||||
struct addrinfo *ptr;
|
|
||||||
for (ptr = *res; ptr->ai_next; ptr = ptr->ai_next)
|
|
||||||
;
|
|
||||||
ptr->ai_next = v4res;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
*res = v4res;
|
|
||||||
ret = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
__except (EFAULT)
|
__except (EFAULT)
|
||||||
{
|
{
|
||||||
|
@ -3592,31 +3544,6 @@ cygwin_getnameinfo (const struct sockaddr *sa, socklen_t salen,
|
||||||
|
|
||||||
__try
|
__try
|
||||||
{
|
{
|
||||||
/* When the incoming port number does not resolve to a well-known service,
|
|
||||||
WinSock's getnameinfo up to Windows 2003 returns with error WSANO_DATA
|
|
||||||
instead of setting `serv' to the numeric port number string, as
|
|
||||||
required by RFC 3493. This is fixed on Vista and later. To avoid the
|
|
||||||
error on systems up to Windows 2003, we check if the port number
|
|
||||||
resolves to a well-known service. If not, we set the NI_NUMERICSERV
|
|
||||||
flag. */
|
|
||||||
if (!wincap.supports_all_posix_ai_flags ())
|
|
||||||
{
|
|
||||||
int port = 0;
|
|
||||||
|
|
||||||
switch (sa->sa_family)
|
|
||||||
{
|
|
||||||
case AF_INET:
|
|
||||||
port = ((struct sockaddr_in *) sa)->sin_port;
|
|
||||||
break;
|
|
||||||
case AF_INET6:
|
|
||||||
port = ((struct sockaddr_in6 *) sa)->sin6_port;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return EAI_FAMILY;
|
|
||||||
}
|
|
||||||
if (!port || !getservbyport (port, flags & NI_DGRAM ? "udp" : "tcp"))
|
|
||||||
flags |= NI_NUMERICSERV;
|
|
||||||
}
|
|
||||||
/* We call GetNameInfoW with local buffers and convert to locale
|
/* We call GetNameInfoW with local buffers and convert to locale
|
||||||
charset to allow RFC 3490 IDNs like glibc 2.3.4 and later. */
|
charset to allow RFC 3490 IDNs like glibc 2.3.4 and later. */
|
||||||
#define NI_IDN_MASK (NI_IDN | \
|
#define NI_IDN_MASK (NI_IDN | \
|
||||||
|
|
|
@ -24,7 +24,6 @@ wincaps wincap_xpsp2 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
||||||
has_mandatory_integrity_control:false,
|
has_mandatory_integrity_control:false,
|
||||||
needs_count_in_si_lpres2:false,
|
needs_count_in_si_lpres2:false,
|
||||||
has_gaa_largeaddress_bug:false,
|
has_gaa_largeaddress_bug:false,
|
||||||
supports_all_posix_ai_flags:false,
|
|
||||||
has_restricted_stack_args:false,
|
has_restricted_stack_args:false,
|
||||||
has_transactions:false,
|
has_transactions:false,
|
||||||
has_sendmsg:false,
|
has_sendmsg:false,
|
||||||
|
@ -57,7 +56,6 @@ wincaps wincap_2003 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
||||||
has_mandatory_integrity_control:false,
|
has_mandatory_integrity_control:false,
|
||||||
needs_count_in_si_lpres2:false,
|
needs_count_in_si_lpres2:false,
|
||||||
has_gaa_largeaddress_bug:false,
|
has_gaa_largeaddress_bug:false,
|
||||||
supports_all_posix_ai_flags:false,
|
|
||||||
has_restricted_stack_args:true,
|
has_restricted_stack_args:true,
|
||||||
has_transactions:false,
|
has_transactions:false,
|
||||||
has_sendmsg:false,
|
has_sendmsg:false,
|
||||||
|
@ -90,7 +88,6 @@ wincaps wincap_vista __attribute__((section (".cygwin_dll_common"), shared)) = {
|
||||||
has_mandatory_integrity_control:true,
|
has_mandatory_integrity_control:true,
|
||||||
needs_count_in_si_lpres2:true,
|
needs_count_in_si_lpres2:true,
|
||||||
has_gaa_largeaddress_bug:true,
|
has_gaa_largeaddress_bug:true,
|
||||||
supports_all_posix_ai_flags:true,
|
|
||||||
has_restricted_stack_args:false,
|
has_restricted_stack_args:false,
|
||||||
has_transactions:true,
|
has_transactions:true,
|
||||||
has_sendmsg:true,
|
has_sendmsg:true,
|
||||||
|
@ -123,7 +120,6 @@ wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
||||||
has_mandatory_integrity_control:true,
|
has_mandatory_integrity_control:true,
|
||||||
needs_count_in_si_lpres2:false,
|
needs_count_in_si_lpres2:false,
|
||||||
has_gaa_largeaddress_bug:true,
|
has_gaa_largeaddress_bug:true,
|
||||||
supports_all_posix_ai_flags:true,
|
|
||||||
has_restricted_stack_args:false,
|
has_restricted_stack_args:false,
|
||||||
has_transactions:true,
|
has_transactions:true,
|
||||||
has_sendmsg:true,
|
has_sendmsg:true,
|
||||||
|
@ -156,7 +152,6 @@ wincaps wincap_8 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
||||||
has_mandatory_integrity_control:true,
|
has_mandatory_integrity_control:true,
|
||||||
needs_count_in_si_lpres2:false,
|
needs_count_in_si_lpres2:false,
|
||||||
has_gaa_largeaddress_bug:false,
|
has_gaa_largeaddress_bug:false,
|
||||||
supports_all_posix_ai_flags:true,
|
|
||||||
has_restricted_stack_args:false,
|
has_restricted_stack_args:false,
|
||||||
has_transactions:true,
|
has_transactions:true,
|
||||||
has_sendmsg:true,
|
has_sendmsg:true,
|
||||||
|
@ -189,7 +184,6 @@ wincaps wincap_10 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
||||||
has_mandatory_integrity_control:true,
|
has_mandatory_integrity_control:true,
|
||||||
needs_count_in_si_lpres2:false,
|
needs_count_in_si_lpres2:false,
|
||||||
has_gaa_largeaddress_bug:false,
|
has_gaa_largeaddress_bug:false,
|
||||||
supports_all_posix_ai_flags:true,
|
|
||||||
has_restricted_stack_args:false,
|
has_restricted_stack_args:false,
|
||||||
has_transactions:true,
|
has_transactions:true,
|
||||||
has_sendmsg:true,
|
has_sendmsg:true,
|
||||||
|
@ -222,7 +216,6 @@ wincaps wincap_10_1511 __attribute__((section (".cygwin_dll_common"), shared)) =
|
||||||
has_mandatory_integrity_control:true,
|
has_mandatory_integrity_control:true,
|
||||||
needs_count_in_si_lpres2:false,
|
needs_count_in_si_lpres2:false,
|
||||||
has_gaa_largeaddress_bug:false,
|
has_gaa_largeaddress_bug:false,
|
||||||
supports_all_posix_ai_flags:true,
|
|
||||||
has_restricted_stack_args:false,
|
has_restricted_stack_args:false,
|
||||||
has_transactions:true,
|
has_transactions:true,
|
||||||
has_sendmsg:true,
|
has_sendmsg:true,
|
||||||
|
|
|
@ -17,7 +17,6 @@ struct wincaps
|
||||||
unsigned has_mandatory_integrity_control : 1;
|
unsigned has_mandatory_integrity_control : 1;
|
||||||
unsigned needs_count_in_si_lpres2 : 1;
|
unsigned needs_count_in_si_lpres2 : 1;
|
||||||
unsigned has_gaa_largeaddress_bug : 1;
|
unsigned has_gaa_largeaddress_bug : 1;
|
||||||
unsigned supports_all_posix_ai_flags : 1;
|
|
||||||
unsigned has_restricted_stack_args : 1;
|
unsigned has_restricted_stack_args : 1;
|
||||||
unsigned has_transactions : 1;
|
unsigned has_transactions : 1;
|
||||||
unsigned has_sendmsg : 1;
|
unsigned has_sendmsg : 1;
|
||||||
|
@ -75,7 +74,6 @@ public:
|
||||||
bool IMPLEMENT (has_mandatory_integrity_control)
|
bool IMPLEMENT (has_mandatory_integrity_control)
|
||||||
bool IMPLEMENT (needs_count_in_si_lpres2)
|
bool IMPLEMENT (needs_count_in_si_lpres2)
|
||||||
bool IMPLEMENT (has_gaa_largeaddress_bug)
|
bool IMPLEMENT (has_gaa_largeaddress_bug)
|
||||||
bool IMPLEMENT (supports_all_posix_ai_flags)
|
|
||||||
bool IMPLEMENT (has_restricted_stack_args)
|
bool IMPLEMENT (has_restricted_stack_args)
|
||||||
bool IMPLEMENT (has_transactions)
|
bool IMPLEMENT (has_transactions)
|
||||||
bool IMPLEMENT (has_sendmsg)
|
bool IMPLEMENT (has_sendmsg)
|
||||||
|
|
Loading…
Reference in New Issue