{"thread":{"id":"50600","subject":"[PATCH 0/1] Drop Windows XP-specific code to support IPv6","startedAt":"2019-02-27T08:43:17Z","lastAt":"2019-04-29T22:58:04Z","messageCount":3,"participants":["Johannes Schindelin via GitGitGadget","Tanushree Tumane via GitGitGadget","Johannes Schindelin"],"isPatch":true,"patchVersion":1,"patchTotal":1},"messages":[{"id":"370289","messageId":"pull.144.git.gitgitgadget@gmail.com","threadId":"50600","inReplyTo":null,"subject":"[PATCH 0/1] Drop Windows XP-specific code to support IPv6","fromName":"Johannes Schindelin via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2019-02-27T08:43:12Z","receivedAt":"2019-02-27T08:43:17Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"We no longer support Windows XP, and can therefore rely on API functions\nthat are available since Windows Vista.\n\nTanushree Tumane (1):\n  mingw: remove obsolete IPv6-related code\n\n compat/mingw.c | 178 +------------------------------------------------\n compat/mingw.h |   8 ---\n 2 files changed, 3 insertions(+), 183 deletions(-)\n\n\nbase-commit: 8104ec994ea3849a968b4667d072fedd1e688642\nPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-144%2Fdscho%2Fremove-ipv6-fallback-v1\nFetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-144/dscho/remove-ipv6-fallback-v1\nPull-Request: https://github.com/gitgitgadget/git/pull/144\n-- \ngitgitgadget\n"},{"id":"370290","messageId":"1a5a1447f437c99cfcaac01a506093c3697a52b6.1551256992.git.gitgitgadget@gmail.com","threadId":"50600","inReplyTo":"pull.144.git.gitgitgadget@gmail.com","subject":"[PATCH 1/1] mingw: remove obsolete IPv6-related code","fromName":"Tanushree Tumane via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2019-02-27T08:43:13Z","receivedAt":"2019-02-27T08:43:18Z","isPatch":true,"sender":{"key":"tanushreetumane@gmail.com","avatar":"https://avatars.githubusercontent.com/u/22275398?v=4"},"body":"From: Tanushree Tumane <tanushreetumane@gmail.com>\n\nTo support IPv6, Git provided fall back functions for Windows versions\nthat did not support IPv6. However, as Git dropped support for Windows\nXP and prior, those functions are not needed anymore.\n\nRemove those fallbacks by reverting fe3b2b7b827c (Enable support for\nIPv6 on MinGW, 2009-11-24) and using the functions directly (without\n'ipv6_' prefix).\n\nSigned-off-by: Tanushree Tumane <tanushreetumane@gmail.com>\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n compat/mingw.c | 178 +------------------------------------------------\n compat/mingw.h |   8 ---\n 2 files changed, 3 insertions(+), 183 deletions(-)\n\ndiff --git a/compat/mingw.c b/compat/mingw.c\nindex 8141f77189..80b6b288a1 100644\n--- a/compat/mingw.c\n+++ b/compat/mingw.c\n@@ -1705,142 +1705,10 @@ int mingw_putenv(const char *namevalue)\n \treturn result ? 0 : -1;\n }\n \n-/*\n- * Note, this isn't a complete replacement for getaddrinfo. It assumes\n- * that service contains a numerical port, or that it is null. It\n- * does a simple search using gethostbyname, and returns one IPv4 host\n- * if one was found.\n- */\n-static int WSAAPI getaddrinfo_stub(const char *node, const char *service,\n-\t\t\t\t   const struct addrinfo *hints,\n-\t\t\t\t   struct addrinfo **res)\n-{\n-\tstruct hostent *h = NULL;\n-\tstruct addrinfo *ai;\n-\tstruct sockaddr_in *sin;\n-\n-\tif (node) {\n-\t\th = gethostbyname(node);\n-\t\tif (!h)\n-\t\t\treturn WSAGetLastError();\n-\t}\n-\n-\tai = xmalloc(sizeof(struct addrinfo));\n-\t*res = ai;\n-\tai->ai_flags = 0;\n-\tai->ai_family = AF_INET;\n-\tai->ai_socktype = hints ? hints->ai_socktype : 0;\n-\tswitch (ai->ai_socktype) {\n-\tcase SOCK_STREAM:\n-\t\tai->ai_protocol = IPPROTO_TCP;\n-\t\tbreak;\n-\tcase SOCK_DGRAM:\n-\t\tai->ai_protocol = IPPROTO_UDP;\n-\t\tbreak;\n-\tdefault:\n-\t\tai->ai_protocol = 0;\n-\t\tbreak;\n-\t}\n-\tai->ai_addrlen = sizeof(struct sockaddr_in);\n-\tif (hints && (hints->ai_flags & AI_CANONNAME))\n-\t\tai->ai_canonname = h ? xstrdup(h->h_name) : NULL;\n-\telse\n-\t\tai->ai_canonname = NULL;\n-\n-\tsin = xcalloc(1, ai->ai_addrlen);\n-\tsin->sin_family = AF_INET;\n-\t/* Note: getaddrinfo is supposed to allow service to be a string,\n-\t * which should be looked up using getservbyname. This is\n-\t * currently not implemented */\n-\tif (service)\n-\t\tsin->sin_port = htons(atoi(service));\n-\tif (h)\n-\t\tsin->sin_addr = *(struct in_addr *)h->h_addr;\n-\telse if (hints && (hints->ai_flags & AI_PASSIVE))\n-\t\tsin->sin_addr.s_addr = INADDR_ANY;\n-\telse\n-\t\tsin->sin_addr.s_addr = INADDR_LOOPBACK;\n-\tai->ai_addr = (struct sockaddr *)sin;\n-\tai->ai_next = NULL;\n-\treturn 0;\n-}\n-\n-static void WSAAPI freeaddrinfo_stub(struct addrinfo *res)\n-{\n-\tfree(res->ai_canonname);\n-\tfree(res->ai_addr);\n-\tfree(res);\n-}\n-\n-static int WSAAPI getnameinfo_stub(const struct sockaddr *sa, socklen_t salen,\n-\t\t\t\t   char *host, DWORD hostlen,\n-\t\t\t\t   char *serv, DWORD servlen, int flags)\n-{\n-\tconst struct sockaddr_in *sin = (const struct sockaddr_in *)sa;\n-\tif (sa->sa_family != AF_INET)\n-\t\treturn EAI_FAMILY;\n-\tif (!host && !serv)\n-\t\treturn EAI_NONAME;\n-\n-\tif (host && hostlen > 0) {\n-\t\tstruct hostent *ent = NULL;\n-\t\tif (!(flags & NI_NUMERICHOST))\n-\t\t\tent = gethostbyaddr((const char *)&sin->sin_addr,\n-\t\t\t\t\t    sizeof(sin->sin_addr), AF_INET);\n-\n-\t\tif (ent)\n-\t\t\tsnprintf(host, hostlen, \"%s\", ent->h_name);\n-\t\telse if (flags & NI_NAMEREQD)\n-\t\t\treturn EAI_NONAME;\n-\t\telse\n-\t\t\tsnprintf(host, hostlen, \"%s\", inet_ntoa(sin->sin_addr));\n-\t}\n-\n-\tif (serv && servlen > 0) {\n-\t\tstruct servent *ent = NULL;\n-\t\tif (!(flags & NI_NUMERICSERV))\n-\t\t\tent = getservbyport(sin->sin_port,\n-\t\t\t\t\t    flags & NI_DGRAM ? \"udp\" : \"tcp\");\n-\n-\t\tif (ent)\n-\t\t\tsnprintf(serv, servlen, \"%s\", ent->s_name);\n-\t\telse\n-\t\t\tsnprintf(serv, servlen, \"%d\", ntohs(sin->sin_port));\n-\t}\n-\n-\treturn 0;\n-}\n-\n-static HMODULE ipv6_dll = NULL;\n-static void (WSAAPI *ipv6_freeaddrinfo)(struct addrinfo *res);\n-static int (WSAAPI *ipv6_getaddrinfo)(const char *node, const char *service,\n-\t\t\t\t      const struct addrinfo *hints,\n-\t\t\t\t      struct addrinfo **res);\n-static int (WSAAPI *ipv6_getnameinfo)(const struct sockaddr *sa, socklen_t salen,\n-\t\t\t\t      char *host, DWORD hostlen,\n-\t\t\t\t      char *serv, DWORD servlen, int flags);\n-/*\n- * gai_strerror is an inline function in the ws2tcpip.h header, so we\n- * don't need to try to load that one dynamically.\n- */\n-\n-static void socket_cleanup(void)\n-{\n-\tWSACleanup();\n-\tif (ipv6_dll)\n-\t\tFreeLibrary(ipv6_dll);\n-\tipv6_dll = NULL;\n-\tipv6_freeaddrinfo = freeaddrinfo_stub;\n-\tipv6_getaddrinfo = getaddrinfo_stub;\n-\tipv6_getnameinfo = getnameinfo_stub;\n-}\n-\n static void ensure_socket_initialization(void)\n {\n \tWSADATA wsa;\n \tstatic int initialized = 0;\n-\tconst char *libraries[] = { \"ws2_32.dll\", \"wship6.dll\", NULL };\n-\tconst char **name;\n \n \tif (initialized)\n \t\treturn;\n@@ -1849,35 +1717,7 @@ static void ensure_socket_initialization(void)\n \t\tdie(\"unable to initialize winsock subsystem, error %d\",\n \t\t\tWSAGetLastError());\n \n-\tfor (name = libraries; *name; name++) {\n-\t\tipv6_dll = LoadLibraryExA(*name, NULL,\n-\t\t\t\t\t  LOAD_LIBRARY_SEARCH_SYSTEM32);\n-\t\tif (!ipv6_dll)\n-\t\t\tcontinue;\n-\n-\t\tipv6_freeaddrinfo = (void (WSAAPI *)(struct addrinfo *))\n-\t\t\tGetProcAddress(ipv6_dll, \"freeaddrinfo\");\n-\t\tipv6_getaddrinfo = (int (WSAAPI *)(const char *, const char *,\n-\t\t\t\t\t\t   const struct addrinfo *,\n-\t\t\t\t\t\t   struct addrinfo **))\n-\t\t\tGetProcAddress(ipv6_dll, \"getaddrinfo\");\n-\t\tipv6_getnameinfo = (int (WSAAPI *)(const struct sockaddr *,\n-\t\t\t\t\t\t   socklen_t, char *, DWORD,\n-\t\t\t\t\t\t   char *, DWORD, int))\n-\t\t\tGetProcAddress(ipv6_dll, \"getnameinfo\");\n-\t\tif (!ipv6_freeaddrinfo || !ipv6_getaddrinfo || !ipv6_getnameinfo) {\n-\t\t\tFreeLibrary(ipv6_dll);\n-\t\t\tipv6_dll = NULL;\n-\t\t} else\n-\t\t\tbreak;\n-\t}\n-\tif (!ipv6_freeaddrinfo || !ipv6_getaddrinfo || !ipv6_getnameinfo) {\n-\t\tipv6_freeaddrinfo = freeaddrinfo_stub;\n-\t\tipv6_getaddrinfo = getaddrinfo_stub;\n-\t\tipv6_getnameinfo = getnameinfo_stub;\n-\t}\n-\n-\tatexit(socket_cleanup);\n+\tatexit((void(*)(void)) WSACleanup);\n \tinitialized = 1;\n }\n \n@@ -1895,24 +1735,12 @@ struct hostent *mingw_gethostbyname(const char *host)\n \treturn gethostbyname(host);\n }\n \n-void mingw_freeaddrinfo(struct addrinfo *res)\n-{\n-\tipv6_freeaddrinfo(res);\n-}\n-\n+#undef getaddrinfo\n int mingw_getaddrinfo(const char *node, const char *service,\n \t\t      const struct addrinfo *hints, struct addrinfo **res)\n {\n \tensure_socket_initialization();\n-\treturn ipv6_getaddrinfo(node, service, hints, res);\n-}\n-\n-int mingw_getnameinfo(const struct sockaddr *sa, socklen_t salen,\n-\t\t      char *host, DWORD hostlen, char *serv, DWORD servlen,\n-\t\t      int flags)\n-{\n-\tensure_socket_initialization();\n-\treturn ipv6_getnameinfo(sa, salen, host, hostlen, serv, servlen, flags);\n+\treturn getaddrinfo(node, service, hints, res);\n }\n \n int mingw_socket(int domain, int type, int protocol)\ndiff --git a/compat/mingw.h b/compat/mingw.h\nindex 30d9fb3e36..e883b40c7d 100644\n--- a/compat/mingw.h\n+++ b/compat/mingw.h\n@@ -296,18 +296,10 @@ int mingw_gethostname(char *host, int namelen);\n struct hostent *mingw_gethostbyname(const char *host);\n #define gethostbyname mingw_gethostbyname\n \n-void mingw_freeaddrinfo(struct addrinfo *res);\n-#define freeaddrinfo mingw_freeaddrinfo\n-\n int mingw_getaddrinfo(const char *node, const char *service,\n \t\t      const struct addrinfo *hints, struct addrinfo **res);\n #define getaddrinfo mingw_getaddrinfo\n \n-int mingw_getnameinfo(const struct sockaddr *sa, socklen_t salen,\n-\t\t      char *host, DWORD hostlen, char *serv, DWORD servlen,\n-\t\t      int flags);\n-#define getnameinfo mingw_getnameinfo\n-\n int mingw_socket(int domain, int type, int protocol);\n #define socket mingw_socket\n \n-- \ngitgitgadget\n"},{"id":"374684","messageId":"nycvar.QRO.7.76.6.1904291853550.45@tvgsbejvaqbjf.bet","threadId":"50600","inReplyTo":"1a5a1447f437c99cfcaac01a506093c3697a52b6.1551256992.git.gitgitgadget@gmail.com","subject":"Re: [PATCH 1/1] mingw: remove obsolete IPv6-related code","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2019-04-29T22:58:00Z","receivedAt":"2019-04-29T22:58:04Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Junio,\n\nit looks as if this patch was not yet picked up? This is a\nstraight-forward code removal in favor of dropping Windows XP support\n(which we officially did, quite some time ago).\n\nIs there anything you want me to do to get this at least into `pu`?\n\nCiao,\nDscho\n\nOn Wed, 27 Feb 2019, Tanushree Tumane via GitGitGadget wrote:\n\n> From: Tanushree Tumane <tanushreetumane@gmail.com>\n>\n> To support IPv6, Git provided fall back functions for Windows versions\n> that did not support IPv6. However, as Git dropped support for Windows\n> XP and prior, those functions are not needed anymore.\n>\n> Remove those fallbacks by reverting fe3b2b7b827c (Enable support for\n> IPv6 on MinGW, 2009-11-24) and using the functions directly (without\n> 'ipv6_' prefix).\n>\n> Signed-off-by: Tanushree Tumane <tanushreetumane@gmail.com>\n> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n> ---\n>  compat/mingw.c | 178 +------------------------------------------------\n>  compat/mingw.h |   8 ---\n>  2 files changed, 3 insertions(+), 183 deletions(-)\n>\n> diff --git a/compat/mingw.c b/compat/mingw.c\n> index 8141f77189..80b6b288a1 100644\n> --- a/compat/mingw.c\n> +++ b/compat/mingw.c\n> @@ -1705,142 +1705,10 @@ int mingw_putenv(const char *namevalue)\n>  \treturn result ? 0 : -1;\n>  }\n>\n> -/*\n> - * Note, this isn't a complete replacement for getaddrinfo. It assumes\n> - * that service contains a numerical port, or that it is null. It\n> - * does a simple search using gethostbyname, and returns one IPv4 host\n> - * if one was found.\n> - */\n> -static int WSAAPI getaddrinfo_stub(const char *node, const char *service,\n> -\t\t\t\t   const struct addrinfo *hints,\n> -\t\t\t\t   struct addrinfo **res)\n> -{\n> -\tstruct hostent *h = NULL;\n> -\tstruct addrinfo *ai;\n> -\tstruct sockaddr_in *sin;\n> -\n> -\tif (node) {\n> -\t\th = gethostbyname(node);\n> -\t\tif (!h)\n> -\t\t\treturn WSAGetLastError();\n> -\t}\n> -\n> -\tai = xmalloc(sizeof(struct addrinfo));\n> -\t*res = ai;\n> -\tai->ai_flags = 0;\n> -\tai->ai_family = AF_INET;\n> -\tai->ai_socktype = hints ? hints->ai_socktype : 0;\n> -\tswitch (ai->ai_socktype) {\n> -\tcase SOCK_STREAM:\n> -\t\tai->ai_protocol = IPPROTO_TCP;\n> -\t\tbreak;\n> -\tcase SOCK_DGRAM:\n> -\t\tai->ai_protocol = IPPROTO_UDP;\n> -\t\tbreak;\n> -\tdefault:\n> -\t\tai->ai_protocol = 0;\n> -\t\tbreak;\n> -\t}\n> -\tai->ai_addrlen = sizeof(struct sockaddr_in);\n> -\tif (hints && (hints->ai_flags & AI_CANONNAME))\n> -\t\tai->ai_canonname = h ? xstrdup(h->h_name) : NULL;\n> -\telse\n> -\t\tai->ai_canonname = NULL;\n> -\n> -\tsin = xcalloc(1, ai->ai_addrlen);\n> -\tsin->sin_family = AF_INET;\n> -\t/* Note: getaddrinfo is supposed to allow service to be a string,\n> -\t * which should be looked up using getservbyname. This is\n> -\t * currently not implemented */\n> -\tif (service)\n> -\t\tsin->sin_port = htons(atoi(service));\n> -\tif (h)\n> -\t\tsin->sin_addr = *(struct in_addr *)h->h_addr;\n> -\telse if (hints && (hints->ai_flags & AI_PASSIVE))\n> -\t\tsin->sin_addr.s_addr = INADDR_ANY;\n> -\telse\n> -\t\tsin->sin_addr.s_addr = INADDR_LOOPBACK;\n> -\tai->ai_addr = (struct sockaddr *)sin;\n> -\tai->ai_next = NULL;\n> -\treturn 0;\n> -}\n> -\n> -static void WSAAPI freeaddrinfo_stub(struct addrinfo *res)\n> -{\n> -\tfree(res->ai_canonname);\n> -\tfree(res->ai_addr);\n> -\tfree(res);\n> -}\n> -\n> -static int WSAAPI getnameinfo_stub(const struct sockaddr *sa, socklen_t salen,\n> -\t\t\t\t   char *host, DWORD hostlen,\n> -\t\t\t\t   char *serv, DWORD servlen, int flags)\n> -{\n> -\tconst struct sockaddr_in *sin = (const struct sockaddr_in *)sa;\n> -\tif (sa->sa_family != AF_INET)\n> -\t\treturn EAI_FAMILY;\n> -\tif (!host && !serv)\n> -\t\treturn EAI_NONAME;\n> -\n> -\tif (host && hostlen > 0) {\n> -\t\tstruct hostent *ent = NULL;\n> -\t\tif (!(flags & NI_NUMERICHOST))\n> -\t\t\tent = gethostbyaddr((const char *)&sin->sin_addr,\n> -\t\t\t\t\t    sizeof(sin->sin_addr), AF_INET);\n> -\n> -\t\tif (ent)\n> -\t\t\tsnprintf(host, hostlen, \"%s\", ent->h_name);\n> -\t\telse if (flags & NI_NAMEREQD)\n> -\t\t\treturn EAI_NONAME;\n> -\t\telse\n> -\t\t\tsnprintf(host, hostlen, \"%s\", inet_ntoa(sin->sin_addr));\n> -\t}\n> -\n> -\tif (serv && servlen > 0) {\n> -\t\tstruct servent *ent = NULL;\n> -\t\tif (!(flags & NI_NUMERICSERV))\n> -\t\t\tent = getservbyport(sin->sin_port,\n> -\t\t\t\t\t    flags & NI_DGRAM ? \"udp\" : \"tcp\");\n> -\n> -\t\tif (ent)\n> -\t\t\tsnprintf(serv, servlen, \"%s\", ent->s_name);\n> -\t\telse\n> -\t\t\tsnprintf(serv, servlen, \"%d\", ntohs(sin->sin_port));\n> -\t}\n> -\n> -\treturn 0;\n> -}\n> -\n> -static HMODULE ipv6_dll = NULL;\n> -static void (WSAAPI *ipv6_freeaddrinfo)(struct addrinfo *res);\n> -static int (WSAAPI *ipv6_getaddrinfo)(const char *node, const char *service,\n> -\t\t\t\t      const struct addrinfo *hints,\n> -\t\t\t\t      struct addrinfo **res);\n> -static int (WSAAPI *ipv6_getnameinfo)(const struct sockaddr *sa, socklen_t salen,\n> -\t\t\t\t      char *host, DWORD hostlen,\n> -\t\t\t\t      char *serv, DWORD servlen, int flags);\n> -/*\n> - * gai_strerror is an inline function in the ws2tcpip.h header, so we\n> - * don't need to try to load that one dynamically.\n> - */\n> -\n> -static void socket_cleanup(void)\n> -{\n> -\tWSACleanup();\n> -\tif (ipv6_dll)\n> -\t\tFreeLibrary(ipv6_dll);\n> -\tipv6_dll = NULL;\n> -\tipv6_freeaddrinfo = freeaddrinfo_stub;\n> -\tipv6_getaddrinfo = getaddrinfo_stub;\n> -\tipv6_getnameinfo = getnameinfo_stub;\n> -}\n> -\n>  static void ensure_socket_initialization(void)\n>  {\n>  \tWSADATA wsa;\n>  \tstatic int initialized = 0;\n> -\tconst char *libraries[] = { \"ws2_32.dll\", \"wship6.dll\", NULL };\n> -\tconst char **name;\n>\n>  \tif (initialized)\n>  \t\treturn;\n> @@ -1849,35 +1717,7 @@ static void ensure_socket_initialization(void)\n>  \t\tdie(\"unable to initialize winsock subsystem, error %d\",\n>  \t\t\tWSAGetLastError());\n>\n> -\tfor (name = libraries; *name; name++) {\n> -\t\tipv6_dll = LoadLibraryExA(*name, NULL,\n> -\t\t\t\t\t  LOAD_LIBRARY_SEARCH_SYSTEM32);\n> -\t\tif (!ipv6_dll)\n> -\t\t\tcontinue;\n> -\n> -\t\tipv6_freeaddrinfo = (void (WSAAPI *)(struct addrinfo *))\n> -\t\t\tGetProcAddress(ipv6_dll, \"freeaddrinfo\");\n> -\t\tipv6_getaddrinfo = (int (WSAAPI *)(const char *, const char *,\n> -\t\t\t\t\t\t   const struct addrinfo *,\n> -\t\t\t\t\t\t   struct addrinfo **))\n> -\t\t\tGetProcAddress(ipv6_dll, \"getaddrinfo\");\n> -\t\tipv6_getnameinfo = (int (WSAAPI *)(const struct sockaddr *,\n> -\t\t\t\t\t\t   socklen_t, char *, DWORD,\n> -\t\t\t\t\t\t   char *, DWORD, int))\n> -\t\t\tGetProcAddress(ipv6_dll, \"getnameinfo\");\n> -\t\tif (!ipv6_freeaddrinfo || !ipv6_getaddrinfo || !ipv6_getnameinfo) {\n> -\t\t\tFreeLibrary(ipv6_dll);\n> -\t\t\tipv6_dll = NULL;\n> -\t\t} else\n> -\t\t\tbreak;\n> -\t}\n> -\tif (!ipv6_freeaddrinfo || !ipv6_getaddrinfo || !ipv6_getnameinfo) {\n> -\t\tipv6_freeaddrinfo = freeaddrinfo_stub;\n> -\t\tipv6_getaddrinfo = getaddrinfo_stub;\n> -\t\tipv6_getnameinfo = getnameinfo_stub;\n> -\t}\n> -\n> -\tatexit(socket_cleanup);\n> +\tatexit((void(*)(void)) WSACleanup);\n>  \tinitialized = 1;\n>  }\n>\n> @@ -1895,24 +1735,12 @@ struct hostent *mingw_gethostbyname(const char *host)\n>  \treturn gethostbyname(host);\n>  }\n>\n> -void mingw_freeaddrinfo(struct addrinfo *res)\n> -{\n> -\tipv6_freeaddrinfo(res);\n> -}\n> -\n> +#undef getaddrinfo\n>  int mingw_getaddrinfo(const char *node, const char *service,\n>  \t\t      const struct addrinfo *hints, struct addrinfo **res)\n>  {\n>  \tensure_socket_initialization();\n> -\treturn ipv6_getaddrinfo(node, service, hints, res);\n> -}\n> -\n> -int mingw_getnameinfo(const struct sockaddr *sa, socklen_t salen,\n> -\t\t      char *host, DWORD hostlen, char *serv, DWORD servlen,\n> -\t\t      int flags)\n> -{\n> -\tensure_socket_initialization();\n> -\treturn ipv6_getnameinfo(sa, salen, host, hostlen, serv, servlen, flags);\n> +\treturn getaddrinfo(node, service, hints, res);\n>  }\n>\n>  int mingw_socket(int domain, int type, int protocol)\n> diff --git a/compat/mingw.h b/compat/mingw.h\n> index 30d9fb3e36..e883b40c7d 100644\n> --- a/compat/mingw.h\n> +++ b/compat/mingw.h\n> @@ -296,18 +296,10 @@ int mingw_gethostname(char *host, int namelen);\n>  struct hostent *mingw_gethostbyname(const char *host);\n>  #define gethostbyname mingw_gethostbyname\n>\n> -void mingw_freeaddrinfo(struct addrinfo *res);\n> -#define freeaddrinfo mingw_freeaddrinfo\n> -\n>  int mingw_getaddrinfo(const char *node, const char *service,\n>  \t\t      const struct addrinfo *hints, struct addrinfo **res);\n>  #define getaddrinfo mingw_getaddrinfo\n>\n> -int mingw_getnameinfo(const struct sockaddr *sa, socklen_t salen,\n> -\t\t      char *host, DWORD hostlen, char *serv, DWORD servlen,\n> -\t\t      int flags);\n> -#define getnameinfo mingw_getnameinfo\n> -\n>  int mingw_socket(int domain, int type, int protocol);\n>  #define socket mingw_socket\n>\n> --\n> gitgitgadget\n>\n>\n"}]}