diff options
author | Andy Polyakov <appro@openssl.org> | 2009-12-30 12:55:23 +0000 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2009-12-30 12:55:23 +0000 |
commit | 2f4c1dc86cca2ad72353357c4ceec09401e9bd81 (patch) | |
tree | bcdd4593f2994d4dc6557464432d194c6e744503 /crypto/bio/b_sock.c | |
parent | f87e3078751ce04493f497c195d3b3547b0cf1e0 (diff) | |
download | openssl-2f4c1dc86cca2ad72353357c4ceec09401e9bd81.tar.gz |
b_sock.c: correct indirect calls on WinSock platforms.
PR: 2130
Submitted by: Eugeny Gostyukhin
Diffstat (limited to 'crypto/bio/b_sock.c')
-rw-r--r-- | crypto/bio/b_sock.c | 17 |
1 files changed, 14 insertions, 3 deletions
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 |