Mercurial > libavformat.hg
changeset 5588:866c497d9abd libavformat
Load the proper getaddrinfo functions from ws2_32.dll, if they're present.
Patch by Martin Storsj <martin at martin dot st>.
author | ramiro |
---|---|
date | Mon, 25 Jan 2010 01:28:01 +0000 |
parents | 0ab98b4a3778 |
children | dca2836e09b8 |
files | os_support.c |
diffstat | 1 files changed, 31 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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)