From: Andy Polyakov Date: Wed, 30 Dec 2009 12:55:23 +0000 (+0000) Subject: b_sock.c: correct indirect calls on WinSock platforms. X-Git-Tag: OpenSSL-fips-2_0-rc1~1374 X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff_plain;h=2f4c1dc86cca2ad72353357c4ceec09401e9bd81;ds=sidebyside b_sock.c: correct indirect calls on WinSock platforms. PR: 2130 Submitted by: Eugeny Gostyukhin --- diff --git a/crypto/bio/b_sock.c b/crypto/bio/b_sock.c index 886786cf64..8a69e99f82 100644 --- a/crypto/bio/b_sock.c +++ b/crypto/bio/b_sock.c @@ -88,6 +88,17 @@ NETDB_DEFINE_CONTEXT static int wsa_init_done=0; #endif +/* + * WSAAPI specifier is required to make indirect calls to run-time + * linked WinSock 2 functions used in this module, to be specific + * [get|free]addrinfo and getnameinfo. This is because WinSock uses + * uses non-C calling convention, __stdcall vs. __cdecl, on x86 + * Windows. On non-WinSock platforms WSAAPI needs to be void. + */ +#ifndef WSAAPI +#define WSAAPI +#endif + #if 0 static unsigned long BIO_ghbn_hits=0L; static unsigned long BIO_ghbn_miss=0L; @@ -627,12 +638,12 @@ int BIO_get_accept_socket(char *host, int bind_mode) #ifdef EAI_FAMILY do { static union { void *p; - int (*f)(const char *,const char *, + int (WSAAPI *f)(const char *,const char *, const struct addrinfo *, struct addrinfo **); } p_getaddrinfo = {NULL}; static union { void *p; - void (*f)(struct addrinfo *); + void (WSAAPI *f)(struct addrinfo *); } p_freeaddrinfo = {NULL}; struct addrinfo *res,hint; @@ -840,7 +851,7 @@ int BIO_accept(int sock, char **addr) char h[NI_MAXHOST],s[NI_MAXSERV]; size_t nl; static union { void *p; - int (*f)(const struct sockaddr *,size_t/*socklen_t*/, + int (WSAAPI *f)(const struct sockaddr *,size_t/*socklen_t*/, char *,size_t,char *,size_t,int); } p_getnameinfo = {NULL}; /* 2nd argument to getnameinfo is specified to