# HG changeset patch # User ramiro # Date 1264382881 0 # Node ID 866c497d9abd4609011ffd1493b0abc972729925 # Parent 0ab98b4a377877af742fae80a3257aef950f2ed0 Load the proper getaddrinfo functions from ws2_32.dll, if they're present. Patch by Martin Storsj . diff -r 0ab98b4a3778 -r 866c497d9abd os_support.c --- a/os_support.c Sun Jan 24 22:07:32 2010 +0000 +++ b/os_support.c Mon Jan 25 01:28:01 2010 +0000 @@ -68,6 +68,16 @@ struct addrinfo *ai; struct sockaddr_in *sin; +#if HAVE_WINSOCK2_H + int (WSAAPI *win_getaddrinfo)(const char *node, const char *service, + const struct addrinfo *hints, + struct addrinfo **res); + HMODULE ws2mod = GetModuleHandle("ws2_32.dll"); + win_getaddrinfo = GetProcAddress(ws2mod, "getaddrinfo"); + if (win_getaddrinfo) + return win_getaddrinfo(node, service, hints, res); +#endif + sin = av_mallocz(sizeof(struct sockaddr_in)); if (!sin) return EAI_FAIL; @@ -124,6 +134,17 @@ void ff_freeaddrinfo(struct addrinfo *res) { +#if HAVE_WINSOCK2_H + void (WSAAPI *win_freeaddrinfo)(struct addrinfo *res); + HMODULE ws2mod = GetModuleHandle("ws2_32.dll"); + win_freeaddrinfo = (void (WSAAPI *)(struct addrinfo *res)) + GetProcAddress(ws2mod, "freeaddrinfo"); + if (win_freeaddrinfo) { + win_freeaddrinfo(res); + return; + } +#endif + av_free(res->ai_canonname); av_free(res->ai_addr); av_free(res); @@ -135,6 +156,16 @@ { const struct sockaddr_in *sin = (const struct sockaddr_in *)sa; +#if HAVE_WINSOCK2_H + int (WSAAPI *win_getnameinfo)(const struct sockaddr *sa, socklen_t salen, + char *host, DWORD hostlen, + char *serv, DWORD servlen, int flags); + HMODULE ws2mod = GetModuleHandle("ws2_32.dll"); + win_getnameinfo = GetProcAddress(ws2mod, "getnameinfo"); + if (win_getnameinfo) + return win_getnameinfo(sa, salen, host, hostlen, serv, servlen, flags); +#endif + if (sa->sa_family != AF_INET) return EAI_FAMILY; if (!host && !serv)