mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-09 16:50:01 +00:00
Load the proper getaddrinfo functions from ws2_32.dll, if they're present.
Patch by Martin Storsjö <martin at martin dot st>. Originally committed as revision 21443 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
3debf366c8
commit
6023d84a2b
@ -68,6 +68,16 @@ int ff_getaddrinfo(const char *node, const char *service,
|
|||||||
struct addrinfo *ai;
|
struct addrinfo *ai;
|
||||||
struct sockaddr_in *sin;
|
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));
|
sin = av_mallocz(sizeof(struct sockaddr_in));
|
||||||
if (!sin)
|
if (!sin)
|
||||||
return EAI_FAIL;
|
return EAI_FAIL;
|
||||||
@ -124,6 +134,17 @@ int ff_getaddrinfo(const char *node, const char *service,
|
|||||||
|
|
||||||
void ff_freeaddrinfo(struct addrinfo *res)
|
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_canonname);
|
||||||
av_free(res->ai_addr);
|
av_free(res->ai_addr);
|
||||||
av_free(res);
|
av_free(res);
|
||||||
@ -135,6 +156,16 @@ int ff_getnameinfo(const struct sockaddr *sa, int salen,
|
|||||||
{
|
{
|
||||||
const struct sockaddr_in *sin = (const struct sockaddr_in *)sa;
|
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)
|
if (sa->sa_family != AF_INET)
|
||||||
return EAI_FAMILY;
|
return EAI_FAMILY;
|
||||||
if (!host && !serv)
|
if (!host && !serv)
|
||||||
|
Loading…
Reference in New Issue
Block a user