X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=platform%2Fwin32%2Fcrt0.c;h=7da2a8151e2ad3b279e0c9005d45b8b56b22c919;hb=6ca24b75c75b9c6f22e1e69693d326b8e3330841;hp=f7f6a925243cc76ebb59e4b1fe0661abf4f1cd8d;hpb=ac40da8bb419deadc1cac5b0b5bd4f1b449d6129;p=pdclib diff --git a/platform/win32/crt0.c b/platform/win32/crt0.c index f7f6a92..7da2a81 100644 --- a/platform/win32/crt0.c +++ b/platform/win32/crt0.c @@ -1,8 +1,10 @@ -#include #include #include #include #include +#include +#include // Watcom bug: winnt.h assumes string.h defines wchar_t +#include static char ** argvToAnsi( wchar_t ** wargv, int argc ) { @@ -22,6 +24,7 @@ static char ** argvToAnsi( wchar_t ** wargv, int argc ) if(rv != sz) { fputs("Error in C runtime initialization: " "size mismatch during character set conversion", stderr); + abort(); } } return argv; @@ -96,7 +99,10 @@ static LONG CALLBACK sehExceptionFilter( EXCEPTION_POINTERS * exInfo ) } extern int main( int argc, char ** argv, char ** envp ); -_PDCLIB_noreturn void mainCRTStartup( void ) + +void __cdecl mainCRTStartup( void ); + +void __cdecl mainCRTStartup( void ) { stdin->handle = GetStdHandle(STD_INPUT_HANDLE); stdout->handle = GetStdHandle(STD_OUTPUT_HANDLE); @@ -107,9 +113,17 @@ _PDCLIB_noreturn void mainCRTStartup( void ) cl = GetCommandLineW(); wargv = CommandLineToArgvW(cl, &argc); argv = argvToAnsi(wargv, argc); + + if( mtx_init(&stdin->lock, mtx_recursive) != thrd_success + || mtx_init(&stdout->lock, mtx_recursive) != thrd_success + || mtx_init(&stderr->lock, mtx_recursive) != thrd_success ) { + fputs( "Error during C runtime initialization: " + "Unable to allocate stdio mutex", stderr ); + } + atexit(freeArgs); int exitStatus = main(argc, argv, NULL); exit(exitStatus); -} +} \ No newline at end of file