diff options
author | Martin Willi <martin@revosec.ch> | 2014-06-05 13:10:43 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2014-06-06 16:28:28 +0200 |
commit | cab59c73fc616c23bf510dd875363da08ce1850c (patch) | |
tree | 1fff8a93e0451fb8ef6a17de09a4e264559d3e62 /src/libcharon/plugins | |
parent | bd19e27ae3295f224bf568d0b7d625a5c6bae8b8 (diff) | |
download | strongswan-cab59c73fc616c23bf510dd875363da08ce1850c.tar.bz2 strongswan-cab59c73fc616c23bf510dd875363da08ce1850c.tar.xz |
windows: Use WINAPI call convention for Windows API callbacks
For x86_64 it does not actually matter, but for i686 builds the call convention
is different with WINAPI.
Diffstat (limited to 'src/libcharon/plugins')
-rw-r--r-- | src/libcharon/plugins/kernel_iph/kernel_iph_net.c | 9 | ||||
-rw-r--r-- | src/libcharon/plugins/kernel_wfp/kernel_wfp_ipsec.c | 6 | ||||
-rw-r--r-- | src/libcharon/plugins/socket_win/socket_win_socket.c | 8 |
3 files changed, 13 insertions, 10 deletions
diff --git a/src/libcharon/plugins/kernel_iph/kernel_iph_net.c b/src/libcharon/plugins/kernel_iph/kernel_iph_net.c index 68b753792..871067b1a 100644 --- a/src/libcharon/plugins/kernel_iph/kernel_iph_net.c +++ b/src/libcharon/plugins/kernel_iph/kernel_iph_net.c @@ -355,9 +355,11 @@ typedef struct { /** * NotifyIpInterfaceChange() callback */ -static void change_interface(private_kernel_iph_net_t *this, - MIB_IPINTERFACE_ROW_FIXUP *row, MIB_NOTIFICATION_TYPE type) +static void WINAPI change_interface(void *user, PMIB_IPINTERFACE_ROW row_badal, + MIB_NOTIFICATION_TYPE type) { + private_kernel_iph_net_t *this = user; + MIB_IPINTERFACE_ROW_FIXUP* row = (MIB_IPINTERFACE_ROW_FIXUP*)row_badal; IP_ADAPTER_ADDRESSES addrs[64], *current; ULONG res, size = sizeof(addrs); @@ -757,7 +759,8 @@ kernel_iph_net_t *kernel_iph_net_create() .mutex = mutex_create(MUTEX_TYPE_DEFAULT), .ifaces = linked_list_create(), ); - + /* PIPINTERFACE_CHANGE_CALLBACK is not using WINAPI in MinGW, which seems + * to be wrong. Force a cast to our WINAPI call */ res = NotifyIpInterfaceChange(AF_UNSPEC, (void*)change_interface, this, TRUE, &this->changes); if (res != NO_ERROR) diff --git a/src/libcharon/plugins/kernel_wfp/kernel_wfp_ipsec.c b/src/libcharon/plugins/kernel_wfp/kernel_wfp_ipsec.c index 5b44f85b5..62b3ea8dd 100644 --- a/src/libcharon/plugins/kernel_wfp/kernel_wfp_ipsec.c +++ b/src/libcharon/plugins/kernel_wfp/kernel_wfp_ipsec.c @@ -1545,9 +1545,9 @@ static traffic_selector_t *addr2ts(FWP_IP_VERSION version, void *data, /** * FwpmNetEventSubscribe0() callback */ -static void event_callback(private_kernel_wfp_ipsec_t *this, - const FWPM_NET_EVENT1 *event) +static void WINAPI event_callback(void *user, const FWPM_NET_EVENT1 *event) { + private_kernel_wfp_ipsec_t *this = user; traffic_selector_t *local = NULL, *remote = NULL; u_int8_t protocol = 0; u_int16_t from_local = 0, to_local = 65535; @@ -1610,7 +1610,7 @@ static bool register_events(private_kernel_wfp_ipsec_t *this) DWORD res; res = FwpmNetEventSubscribe0(this->handle, &subscription, - (void*)event_callback, this, &this->event); + event_callback, this, &this->event); if (res != ERROR_SUCCESS) { DBG1(DBG_KNL, "registering for WFP events failed: 0x%08x", res); diff --git a/src/libcharon/plugins/socket_win/socket_win_socket.c b/src/libcharon/plugins/socket_win/socket_win_socket.c index 2cd951d8f..cf7a2ce5a 100644 --- a/src/libcharon/plugins/socket_win/socket_win_socket.c +++ b/src/libcharon/plugins/socket_win/socket_win_socket.c @@ -75,14 +75,14 @@ struct private_socket_win_socket_t { /** * WSASendMsg function */ - int (*WSASendMsg)(SOCKET, LPWSAMSG, DWORD, LPDWORD, - LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); + int WINAPI (*WSASendMsg)(SOCKET, LPWSAMSG, DWORD, LPDWORD, + LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); /** * WSARecvMsg function */ - int (*WSARecvMsg)(SOCKET, LPWSAMSG, LPDWORD, - LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); + int WINAPI (*WSARecvMsg)(SOCKET, LPWSAMSG, LPDWORD, + LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); }; METHOD(socket_t, receiver, status_t, |