📄 getaddrinfo-cygwin.patch
字号:
--- gnulib/getaddrinfo.c.orig 2007-10-25 16:46:34.728843739 -0500+++ gnulib/getaddrinfo.c 2007-10-25 16:47:17.395395249 -0500@@ -42,6 +42,8 @@ #include "inet_ntop.h" +extern int h_errno;+ /* BeOS has AF_INET, but not PF_INET. */ #ifndef PF_INET # define PF_INET AF_INET@@ -149,25 +151,29 @@ return getaddrinfo_ptr (nodename, servname, hints, res); #endif - if (hints && (hints->ai_flags & ~(AI_CANONNAME|AI_PASSIVE)))+ if (hints && (hints->ai_flags & ~(AI_CANONNAME | AI_PASSIVE))) /* FIXME: Support more flags. */ return EAI_BADFLAGS; if (hints && !validate_family (hints->ai_family)) return EAI_FAMILY; - if (hints &&- hints->ai_socktype != SOCK_STREAM && hints->ai_socktype != SOCK_DGRAM)- /* FIXME: Support other socktype. */- return EAI_SOCKTYPE; /* FIXME: Better return code? */+ if ((hints != NULL) &&+ (hints->ai_socktype != 0) &&+ (hints->ai_socktype != SOCK_STREAM) &&+ (hints->ai_socktype != SOCK_DGRAM))+ {+ /* FIXME: Support other socktype. */+ return EAI_SOCKTYPE; /* FIXME: Better return code? */+ } if (!nodename) {- if (!(hints->ai_flags & AI_PASSIVE))+ if (hints && !(hints->ai_flags & AI_PASSIVE)) return EAI_NONAME; #ifdef HAVE_IPV6- nodename = (hints->ai_family == AF_INET6) ? "::" : "0.0.0.0";+ nodename = (hints && (hints->ai_family == AF_INET6)) ? "::" : "0.0.0.0"; #else nodename = "0.0.0.0"; #endif@@ -198,7 +204,7 @@ } /* FIXME: Use gethostbyname_r if available. */- he = gethostbyname (nodename);+ he = gethostbyname(nodename); if (!he || he->h_addr_list[0] == NULL) return EAI_NONAME; @@ -279,7 +285,7 @@ return EAI_NODATA; } - if (hints && hints->ai_flags & AI_CANONNAME)+ if (hints && (hints->ai_flags & AI_CANONNAME)) { const char *cn; if (he->h_name)@@ -343,9 +349,7 @@ #endif /* FIXME: Support other flags. */- if ((node && nodelen > 0 && !(flags & NI_NUMERICHOST)) ||- (service && servicelen > 0 && !(flags & NI_NUMERICHOST)) ||- (flags & ~(NI_NUMERICHOST|NI_NUMERICSERV)))+ if (flags & ~(NI_NUMERICHOST | NI_NUMERICSERV)) return EAI_BADFLAGS; if (sa == NULL || salen < sizeof (sa->sa_family))@@ -369,34 +373,89 @@ return EAI_FAMILY; } - if (node && nodelen > 0 && flags & NI_NUMERICHOST)+ if (node && (nodelen > 0)) {+ char addrbuf[256];+ switch (sa->sa_family) { #if HAVE_IPV4 case AF_INET:- if (!inet_ntop (AF_INET,+ if (flags & NI_NUMERICHOST)+ {+ if (!inet_ntop (AF_INET, &(((const struct sockaddr_in *) sa)->sin_addr),- node, nodelen))- return EAI_SYSTEM;+ addrbuf, sizeof(addrbuf)))+ return EAI_SYSTEM;+ }+ else+ {+ struct hostent *host_ent = gethostbyaddr(+ (char *)&(((struct sockaddr_in *)sa)->sin_addr),+ sizeof(struct sockaddr_in),+ sa->sa_family);+ if (host_ent != NULL)+ {+ if (nodelen <= snprintf(node, nodelen, "%s",+ host_ent->h_name))+ return EAI_OVERFLOW;+ }+ else+ {+ if (!inet_ntop (AF_INET,+ &(((const struct sockaddr_in *) sa)->sin_addr),+ addrbuf, sizeof(addrbuf)))+ { + return EAI_SYSTEM;+ }+ if (nodelen <= snprintf(node, nodelen, "%s", addrbuf))+ return EAI_OVERFLOW;+ }+ } break; #endif #if HAVE_IPV6 case AF_INET6:- if (!inet_ntop (AF_INET6,+ if (flags & NI_NUMERICHOST)+ {+ if (!inet_ntop (AF_INET6,+ &(((const struct sockaddr_in6 *) sa)->sin6_addr),+ addrbuf, sizeof(addrbuf)))+ return EAI_SYSTEM;+ }+ else+ {+ struct hostent *host_ent = gethostbyaddr(+ (char *)&(((struct sockaddr_in6 *)sa)->sin6_addr),+ sizeof(struct sockaddr_in6),+ sa->sa_family);+ if (host_ent != NULL)+ {+ if (nodelen <= snprintf(node, nodelen, "%s",+ host_ent->h_name))+ return EAI_OVERFLOW;+ }+ else+ {+ if (!inet_ntop (AF_INET6, &(((const struct sockaddr_in6 *) sa)->sin6_addr),- node, nodelen))- return EAI_SYSTEM;+ addrbuf, sizeof(addrbuf)))+ { + return EAI_SYSTEM;+ }+ if (nodelen <= snprintf(node, nodelen, "%s", addrbuf))+ return EAI_OVERFLOW;+ }+ } break; #endif- default: return EAI_FAMILY; } } - if (service && servicelen > 0 && flags & NI_NUMERICSERV)+ if (service && (servicelen > 0)) switch (sa->sa_family) { #if HAVE_IPV4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -