diff options
author | Ryan C. Gordon <icculus@icculus.org> | 2011-09-12 13:36:38 -0400 |
---|---|---|
committer | Ryan C. Gordon <icculus@icculus.org> | 2011-09-12 13:36:38 -0400 |
commit | acd3f0b040de1467de22bd6814d7967b54dd527d (patch) | |
tree | f9f7cf9bfc4c105eca771f199f4cb2b6550ea6b5 | |
parent | 28417bafe91ed40561d3cc94e95d281d99320938 (diff) |
Clean up the win32 compiler warnings for SDL threads, in the 1.3 branch.
--HG--
extra : rebase_source : 420916ed06d79e2d3c1d50e5fb40314ac7d94d85
-rw-r--r-- | include/SDL_thread.h | 12 | ||||
-rw-r--r-- | src/thread/windows/SDL_systhread.c | 45 |
2 files changed, 28 insertions, 29 deletions
diff --git a/include/SDL_thread.h b/include/SDL_thread.h index c771a399..238ed3d4 100644 --- a/include/SDL_thread.h +++ b/include/SDL_thread.h @@ -90,17 +90,6 @@ typedef int (SDLCALL * SDL_ThreadFunction) (void *data); #include <process.h> /* This has _beginthread() and _endthread() defined! */ #endif -#ifdef __GNUC__ -typedef unsigned long (__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, - unsigned - (__stdcall * - func) (void *), - void *arg, - unsigned, - unsigned - *threadID); -typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); -#else typedef uintptr_t(__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, unsigned (__stdcall * func) (void @@ -108,7 +97,6 @@ typedef uintptr_t(__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, void *arg, unsigned, unsigned *threadID); typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); -#endif /** * Create a thread. diff --git a/src/thread/windows/SDL_systhread.c b/src/thread/windows/SDL_systhread.c index d907c130..a1a5a597 100644 --- a/src/thread/windows/SDL_systhread.c +++ b/src/thread/windows/SDL_systhread.c @@ -33,16 +33,13 @@ #include <process.h> #endif -#if __GNUC__ -typedef uintptr_t (__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, - unsigned - (__stdcall * - func) (void *), - void *arg, - unsigned, - unsigned - *threadID); -typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); +/* Cygwin gcc-3 ... MingW64 (even with a i386 host) does this like MSVC. */ +#if (defined(__MINGW32__) && (__GNUC__ < 4)) +typedef unsigned long (__cdecl *pfnSDL_CurrentBeginThread) (void *, unsigned, + unsigned (__stdcall *func)(void *), void *arg, + unsigned, unsigned *threadID); +typedef void (__cdecl *pfnSDL_CurrentEndThread)(unsigned code); + #elif defined(__WATCOMC__) /* This is for Watcom targets except OS2 */ #if __WATCOMC__ < 1240 @@ -59,6 +56,7 @@ typedef unsigned long (__watcall * pfnSDL_CurrentBeginThread) (void *, unsigned *threadID); typedef void (__watcall * pfnSDL_CurrentEndThread) (unsigned code); + #else typedef uintptr_t(__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, unsigned (__stdcall * @@ -77,7 +75,7 @@ typedef struct ThreadStartParms pfnSDL_CurrentEndThread pfnCurrentEndThread; } tThreadStartParms, *pThreadStartParms; -static unsigned __stdcall +static DWORD RunThread(void *data) { pThreadStartParms pThreadParms = (pThreadStartParms) data; @@ -97,6 +95,18 @@ RunThread(void *data) return (0); } +static DWORD WINAPI +RunThreadViaCreateThread(LPVOID data) +{ + return RunThread(data); +} + +static unsigned __stdcall +RunThreadViaBeginThreadEx(void *data) +{ + return (unsigned) RunThread(data); +} + #ifdef SDL_PASSED_BEGINTHREAD_ENDTHREAD int SDL_SYS_CreateThread(SDL_Thread * thread, void *args, @@ -115,7 +125,6 @@ SDL_SYS_CreateThread(SDL_Thread * thread, void *args) pfnSDL_CurrentEndThread pfnEndThread = _endthreadex; #endif #endif /* SDL_PASSED_BEGINTHREAD_ENDTHREAD */ - DWORD threadid = 0; pThreadStartParms pThreadParms = (pThreadStartParms) SDL_malloc(sizeof(tThreadStartParms)); if (!pThreadParms) { @@ -128,12 +137,14 @@ SDL_SYS_CreateThread(SDL_Thread * thread, void *args) pThreadParms->args = args; if (pfnBeginThread) { - thread->handle = - (SYS_ThreadHandle) pfnBeginThread(NULL, 0, RunThread, - pThreadParms, 0, &threadid); + unsigned threadid = 0; + thread->handle = (SYS_ThreadHandle) + ((size_t) pfnBeginThread(NULL, 0, RunThreadViaBeginThreadEx, + pThreadParms, 0, &threadid)); } else { - thread->handle = - CreateThread(NULL, 0, RunThread, pThreadParms, 0, &threadid); + DWORD threadid = 0; + thread->handle = CreateThread(NULL, 0, RunThreadViaCreateThread, + pThreadParms, 0, &threadid); } if (thread->handle == NULL) { SDL_SetError("Not enough resources to create thread"); |