void __F_NAME(__NTMain,__wNTMain)( void ) /***************************************/ { #if defined(__SW_BR) #if defined(_M_IX86) REGISTRATION_RECORD rr; __NewExceptionFilter( &rr ); #endif __process_fini = __FiniRtns; __InitRtns( 255 ); __CommonInit(); exit( __F_NAME(main( ___Argc, ___Argv ),wmain( ___wArgc, ___wArgv )) ); #else REGISTRATION_RECORD rr; thread_data *tdata; __InitRtns( INIT_PRIORITY_THREAD ); tdata = __alloca( __ThreadDataSize ); memset( tdata, 0, __ThreadDataSize ); // tdata->__allocated = 0; tdata->__data_size = __ThreadDataSize; __InitThreadData( tdata ); __NTMainInit( &rr, tdata ); __F_NAME(__CMain,__wCMain)(); #endif }
void __F_NAME(__WinMain,__wWinMain)( void ) { #ifdef __SW_BR { #ifdef _M_IX86 REGISTRATION_RECORD rr; __NewExceptionFilter( &rr ); #endif __process_fini = __FiniRtns; __InitRtns( 255 ); } #else { REGISTRATION_RECORD rr; thread_data *tdata; __InitRtns( INIT_PRIORITY_THREAD ); tdata = __alloca( __ThreadDataSize ); memset( tdata, 0, __ThreadDataSize ); // tdata->__allocated = 0; tdata->__data_size = __ThreadDataSize; __InitThreadData( tdata ); __NTMainInit( &rr, tdata ); /* allocate alternate stack for F77 */ __ASTACKPTR = (char *)alloca( __ASTACKSIZ ) + __ASTACKSIZ; } #endif __CommonInit(); exit( __F_NAME(WinMain,wWinMain)( GetModuleHandle( NULL ), 0, __F_NAME(_LpCmdLine,_LpwCmdLine), SW_SHOWDEFAULT ) ); }
static DWORD WINAPI begin_thread_helper( thread_args *td ) /***********************************************************/ { thread_fnex *rtn; void *arg; REGISTRATION_RECORD rr; thread_data *tdata; DWORD rv; rtn = td->rtn; arg = td->argument; free( td ); if( !__Is_DLL ) { tdata = __alloca( __ThreadDataSize ); if( tdata == NULL ) return( 0 ); memset( tdata, 0, __ThreadDataSize ); // tdata->__allocated = 0; tdata->__data_size = __ThreadDataSize; if( !__NTAddThread( tdata ) ) { return( 0 ); } } __NewExceptionFilter( &rr ); __sig_init_rtn(); // fills in a thread-specific copy of signal table rv = (*rtn)( arg ); _endthreadex( rv ); return( rv ); }
static DWORD WINAPI begin_thread_helper( thread_args *td ) /********************************************************/ { thread_fn *rtn; void *arg; REGISTRATION_RECORD rr; thread_data *tdata; HANDLE thread_handle; rtn = td->rtn; arg = td->argument; thread_handle = td->thread_handle; free( td ); // For DLLs, __NTAddThread has already been called from _LibMain // in DLL_THREAD_ATTACH processing. if( !__Is_DLL ) { // allocate thread_data structure on stack tdata = __alloca( __ThreadDataSize ); if ( tdata ) { memset( tdata, 0, __ThreadDataSize ); // tdata->__allocated = 0; tdata->__data_size = __ThreadDataSize; // do further thread_data initialization and registration if( !__NTAddThread( tdata ) ) { // print runtime error message now ? CloseHandle( thread_handle ); return( 0 ); } } } // now get the thread_data ptr the 'standard' way -- this may cause // a new thread_data structure to be allocated on heap: // by __GetThreadPtr() ==> __MultipleThread(){ TlsGetValue(); if NULL ==> // __GetThreadData() ==> __NTAddThread() ==> __AllocInitThreadData() } tdata = __THREADDATAPTR; if ( !tdata ) { // this is a library runtime error, should we print an error message ? CloseHandle( thread_handle ); return( 0 ); } tdata->thread_handle = thread_handle; __NewExceptionFilter( &rr ); __sig_init_rtn(); // fills in a thread-specific copy of signal table (*rtn)( arg ); _endthread(); return( 0 ); }
static void begin_thread_helper( void *param ) /********************************************************/ { thread_args *td = (thread_args *)param; thread_fn *rtn; void *arg; thread_data *tdata; int thread_handle; REGISTRATION_RECORD rr; td->tid = RdosGetThreadHandle(); rtn = td->rtn; arg = td->argument; thread_handle = td->thread_handle; RdosSetSignal( td->signal ); tdata = (thread_data *)RdosAllocateMem( __ThreadDataSize ); if( tdata != NULL ) { memset( tdata, 0, __ThreadDataSize ); tdata->__data_size = __ThreadDataSize; if( !__RdosAddThread( tdata ) ) { // print runtime error message now ? return; } } // now get the thread_data ptr the 'standard' way -- this may cause // a new thread_data structure to be allocated on heap: tdata = __THREADDATAPTR; if( tdata == NULL ) { // this is a library runtime error, should we print an error message ? return; } __NewExceptionFilter( &rr ); __sig_init_rtn(); // fills in a thread-specific copy of signal table (*rtn)( arg ); _endthread(); RdosFreeMem(tdata); return; }