port from 2.0.12 to 2.0.13 / current SDL-hg repository.
- video: VideoBootStrap->available() is gone.
- thread: all important SDL_CreateThread internal data now put into
struct SDL_Thread: changes to SDL_SYS_CreateThread().
diff --git a/src/thread/os2/SDL_systhread.c b/src/thread/os2/SDL_systhread.c
index 64d5d6f..909ae01 100644
--- a/src/thread/os2/SDL_systhread.c
+++ b/src/thread/os2/SDL_systhread.c
@@ -40,57 +40,39 @@
#include <process.h>
-typedef struct ThreadStartParms {
- void *args;
- pfnSDL_CurrentEndThread pfnCurrentEndThread;
-} tThreadStartParms, *pThreadStartParms;
-
static void RunThread(void *data)
{
- pThreadStartParms pThreadParms = (pThreadStartParms) data;
- pfnSDL_CurrentEndThread pfnEndThread = pThreadParms->pfnCurrentEndThread;
- void *args = pThreadParms->args;
-
- SDL_free( pThreadParms );
+ SDL_Thread *thread = (SDL_Thread *) data;
+ pfnSDL_CurrentEndThread pfnEndThread = (pfnSDL_CurrentEndThread) thread->endfunc;
if ( ppSDLTLSData != NULL )
*ppSDLTLSData = NULL;
- SDL_RunThread( args );
+ SDL_RunThread( thread );
if ( pfnEndThread != NULL )
pfnEndThread();
}
-
-
int
-SDL_SYS_CreateThread(SDL_Thread * thread, void *args,
+SDL_SYS_CreateThread(SDL_Thread * thread,
pfnSDL_CurrentBeginThread pfnBeginThread,
pfnSDL_CurrentEndThread pfnEndThread)
{
- pThreadStartParms pThreadParms = SDL_malloc( sizeof(tThreadStartParms) );
-
- if ( pThreadParms == NULL )
- return SDL_OutOfMemory();
-
if (thread->stacksize == 0)
thread->stacksize = 65536;
- // Also save the real parameters we have to pass to thread function
- pThreadParms->args = args;
-
if (pfnBeginThread) {
// Save the function which we will have to call to clear the RTL of calling app!
- pThreadParms->pfnCurrentEndThread = pfnEndThread;
+ thread->endfunc = pfnEndThread;
// Start the thread using the runtime library of calling app!
thread->handle = (SYS_ThreadHandle)
- pfnBeginThread( RunThread, NULL, thread->stacksize, pThreadParms );
+ pfnBeginThread( RunThread, NULL, thread->stacksize, thread );
}
else {
- pThreadParms->pfnCurrentEndThread = _endthread;
+ thread->endfunc = _endthread;
thread->handle = (SYS_ThreadHandle)
- _beginthread( RunThread, NULL, thread->stacksize, pThreadParms );
+ _beginthread( RunThread, NULL, thread->stacksize, thread );
}
if ( thread->handle == -1 )
diff --git a/src/video/os2/SDL_os2video.c b/src/video/os2/SDL_os2video.c
index 9266152..662c67f 100644
--- a/src/video/os2/SDL_os2video.c
+++ b/src/video/os2/SDL_os2video.c
@@ -1599,7 +1599,7 @@
stSDLDisplayMode.driverdata = pDisplayData;
}
- SDL_AddVideoDisplay( &stSDLDisplay );
+ SDL_AddVideoDisplay( &stSDLDisplay, SDL_FALSE );
}
OS2_InitMouse( _this, pVData->hab );
@@ -1705,7 +1705,7 @@
if (!device)
{
SDL_OutOfMemory();
- return (0);
+ return NULL;
}
/* Set the function pointers */
@@ -1753,21 +1753,22 @@
return device;
}
-
-// Output video system availability checking.
-
-static int OS2DIVE_Available(void)
+static SDL_VideoDevice *OS2DIVE_CreateDevice(int devindex)
{
VIDEOOUTPUTINFO stVOInfo;
-
- return voDive.QueryInfo( &stVOInfo );
+ if (!voDive.QueryInfo(&stVOInfo)) {
+ return NULL;
+ }
+ return OS2_CreateDevice(devindex);
}
-static int OS2VMAN_Available(void)
+static SDL_VideoDevice *OS2VMAN_CreateDevice(int devindex)
{
VIDEOOUTPUTINFO stVOInfo;
-
- return voVMan.QueryInfo( &stVOInfo );
+ if (!voVMan.QueryInfo(&stVOInfo)) {
+ return NULL;
+ }
+ return OS2_CreateDevice(devindex);
}
@@ -1777,13 +1778,13 @@
VideoBootStrap OS2DIVE_bootstrap =
{
OS2DRIVER_NAME_DIVE, "OS/2 video driver",
- OS2DIVE_Available, OS2_CreateDevice
+ OS2DIVE_CreateDevice
};
VideoBootStrap OS2VMAN_bootstrap =
{
OS2DRIVER_NAME_VMAN, "OS/2 video driver",
- OS2VMAN_Available, OS2_CreateDevice
+ OS2VMAN_CreateDevice
};
#endif /* SDL_VIDEO_DRIVER_OS2 */