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.
This commit is contained in:
Martin Willi 2014-06-05 13:10:43 +02:00
parent bd19e27ae3
commit cab59c73fc
8 changed files with 28 additions and 23 deletions

View File

@ -48,8 +48,8 @@ extern void (*dbg) (debug_t group, level_t level, char *fmt, ...);
/** /**
* Forward declaration * Forward declaration
*/ */
static DWORD service_handler(DWORD dwControl, DWORD dwEventType, static DWORD WINAPI service_handler(DWORD dwControl, DWORD dwEventType,
LPVOID lpEventData, LPVOID lpContext); LPVOID lpEventData, LPVOID lpContext);
/** /**
* Logging hook for library logs, using stderr output * Logging hook for library logs, using stderr output
@ -111,7 +111,7 @@ static void update_status(DWORD state)
/** /**
* Control handler for console * Control handler for console
*/ */
static BOOL console_handler(DWORD dwCtrlType) static BOOL WINAPI console_handler(DWORD dwCtrlType)
{ {
switch (dwCtrlType) switch (dwCtrlType)
{ {
@ -135,8 +135,8 @@ static BOOL console_handler(DWORD dwCtrlType)
/** /**
* Service handler function * Service handler function
*/ */
static DWORD service_handler(DWORD dwControl, DWORD dwEventType, static DWORD WINAPI service_handler(DWORD dwControl, DWORD dwEventType,
LPVOID lpEventData, LPVOID lpContext) LPVOID lpEventData, LPVOID lpContext)
{ {
switch (dwControl) switch (dwControl)
{ {
@ -285,7 +285,7 @@ static bool switch_workingdir()
/** /**
* Service main routine when running as service * Service main routine when running as service
*/ */
static void service_main(DWORD dwArgc, LPTSTR *lpszArgv) static void WINAPI service_main(DWORD dwArgc, LPTSTR *lpszArgv)
{ {
memset(&status, 0, sizeof(status)); memset(&status, 0, sizeof(status));
status.dwServiceType = SERVICE_WIN32_OWN_PROCESS; status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;

View File

@ -355,9 +355,11 @@ typedef struct {
/** /**
* NotifyIpInterfaceChange() callback * NotifyIpInterfaceChange() callback
*/ */
static void change_interface(private_kernel_iph_net_t *this, static void WINAPI change_interface(void *user, PMIB_IPINTERFACE_ROW row_badal,
MIB_IPINTERFACE_ROW_FIXUP *row, MIB_NOTIFICATION_TYPE type) 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; IP_ADAPTER_ADDRESSES addrs[64], *current;
ULONG res, size = sizeof(addrs); ULONG res, size = sizeof(addrs);
@ -757,7 +759,8 @@ kernel_iph_net_t *kernel_iph_net_create()
.mutex = mutex_create(MUTEX_TYPE_DEFAULT), .mutex = mutex_create(MUTEX_TYPE_DEFAULT),
.ifaces = linked_list_create(), .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, res = NotifyIpInterfaceChange(AF_UNSPEC, (void*)change_interface,
this, TRUE, &this->changes); this, TRUE, &this->changes);
if (res != NO_ERROR) if (res != NO_ERROR)

View File

@ -1545,9 +1545,9 @@ static traffic_selector_t *addr2ts(FWP_IP_VERSION version, void *data,
/** /**
* FwpmNetEventSubscribe0() callback * FwpmNetEventSubscribe0() callback
*/ */
static void event_callback(private_kernel_wfp_ipsec_t *this, static void WINAPI event_callback(void *user, const FWPM_NET_EVENT1 *event)
const FWPM_NET_EVENT1 *event)
{ {
private_kernel_wfp_ipsec_t *this = user;
traffic_selector_t *local = NULL, *remote = NULL; traffic_selector_t *local = NULL, *remote = NULL;
u_int8_t protocol = 0; u_int8_t protocol = 0;
u_int16_t from_local = 0, to_local = 65535; 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; DWORD res;
res = FwpmNetEventSubscribe0(this->handle, &subscription, res = FwpmNetEventSubscribe0(this->handle, &subscription,
(void*)event_callback, this, &this->event); event_callback, this, &this->event);
if (res != ERROR_SUCCESS) if (res != ERROR_SUCCESS)
{ {
DBG1(DBG_KNL, "registering for WFP events failed: 0x%08x", res); DBG1(DBG_KNL, "registering for WFP events failed: 0x%08x", res);

View File

@ -75,14 +75,14 @@ struct private_socket_win_socket_t {
/** /**
* WSASendMsg function * WSASendMsg function
*/ */
int (*WSASendMsg)(SOCKET, LPWSAMSG, DWORD, LPDWORD, int WINAPI (*WSASendMsg)(SOCKET, LPWSAMSG, DWORD, LPDWORD,
LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
/** /**
* WSARecvMsg function * WSARecvMsg function
*/ */
int (*WSARecvMsg)(SOCKET, LPWSAMSG, LPDWORD, int WINAPI (*WSARecvMsg)(SOCKET, LPWSAMSG, LPDWORD,
LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
}; };
METHOD(socket_t, receiver, status_t, METHOD(socket_t, receiver, status_t,

View File

@ -138,7 +138,7 @@ static DWORD main_thread;
/** /**
* APC routine invoked by main thread on worker failure * APC routine invoked by main thread on worker failure
*/ */
static void set_worker_failure(ULONG_PTR dwParam) static void WINAPI set_worker_failure(ULONG_PTR dwParam)
{ {
worker_failed = TRUE; worker_failed = TRUE;
} }
@ -180,7 +180,7 @@ void test_fail_if_worker_failed()
/** /**
* Vectored exception handler * Vectored exception handler
*/ */
static long eh_handler(PEXCEPTION_POINTERS ei) static long WINAPI eh_handler(PEXCEPTION_POINTERS ei)
{ {
char *ename; char *ename;
bool old = FALSE; bool old = FALSE;

View File

@ -378,8 +378,10 @@ void thread_set_active_condvar(CONDITION_VARIABLE *condvar)
/** /**
* APC to cancel a thread * APC to cancel a thread
*/ */
static void docancel(private_thread_t *this) static void WINAPI docancel(ULONG_PTR dwParam)
{ {
private_thread_t *this = (private_thread_t*)dwParam;
/* make sure cancel() does not access this anymore */ /* make sure cancel() does not access this anymore */
threads_lock->lock(threads_lock); threads_lock->lock(threads_lock);
threads_lock->unlock(threads_lock); threads_lock->unlock(threads_lock);
@ -398,7 +400,7 @@ METHOD(thread_t, cancel, void,
if (!this->cancel_pending) if (!this->cancel_pending)
{ {
this->cancel_pending = TRUE; this->cancel_pending = TRUE;
QueueUserAPC((void*)docancel, this->handle, (uintptr_t)this); QueueUserAPC(docancel, this->handle, (uintptr_t)this);
if (this->condvar) if (this->condvar)
{ {
WakeAllConditionVariable(this->condvar); WakeAllConditionVariable(this->condvar);

View File

@ -247,7 +247,7 @@ static mutex_t *sigint_mutex;
/** /**
* Control handler to catch ^C * Control handler to catch ^C
*/ */
static BOOL handler(DWORD dwCtrlType) static BOOL WINAPI handler(DWORD dwCtrlType)
{ {
switch (dwCtrlType) switch (dwCtrlType)
{ {

View File

@ -116,14 +116,14 @@ char* strndup(const char *s, size_t n);
* Provided via ws2_32 * Provided via ws2_32
*/ */
#ifndef InetNtop #ifndef InetNtop
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); const char WINAPI *inet_ntop(int af, const void *src, char *dst, socklen_t size);
#endif #endif
/** /**
* Provided via ws2_32 * Provided via ws2_32
*/ */
#ifndef InetPton #ifndef InetPton
int inet_pton(int af, const char *src, void *dst); int WINAPI inet_pton(int af, const char *src, void *dst);
#endif #endif
/** /**