#include <stdlib.h>\r
#include <stdio.h>\r
#include <signal.h>\r
+#include <threads.h>\r
#include <wchar.h> // Watcom bug: winnt.h assumes string.h defines wchar_t\r
#include <windows.h>\r
\r
if(rv != sz) {\r
fputs("Error in C runtime initialization: "\r
"size mismatch during character set conversion", stderr);\r
+ abort();\r
}\r
}\r
return argv;\r
\r
extern int main( int argc, char ** argv, char ** envp );\r
\r
+void __cdecl mainCRTStartup( void );\r
+\r
void __cdecl mainCRTStartup( void ) \r
{\r
- stdin->handle = GetStdHandle(STD_INPUT_HANDLE);\r
- stdout->handle = GetStdHandle(STD_OUTPUT_HANDLE);\r
- stderr->handle = GetStdHandle(STD_ERROR_HANDLE);\r
+ stdin->handle.pointer = GetStdHandle(STD_INPUT_HANDLE);\r
+ stdout->handle.pointer = GetStdHandle(STD_OUTPUT_HANDLE);\r
+ stderr->handle.pointer = GetStdHandle(STD_ERROR_HANDLE);\r
\r
oldFilter = SetUnhandledExceptionFilter( sehExceptionFilter );\r
\r
cl = GetCommandLineW();\r
wargv = CommandLineToArgvW(cl, &argc);\r
argv = argvToAnsi(wargv, argc);\r
+\r
+ if( mtx_init(&stdin->lock, mtx_recursive) != thrd_success \r
+ || mtx_init(&stdout->lock, mtx_recursive) != thrd_success\r
+ || mtx_init(&stderr->lock, mtx_recursive) != thrd_success ) {\r
+ fputs( "Error during C runtime initialization: "\r
+ "Unable to allocate stdio mutex", stderr );\r
+ }\r
+\r
atexit(freeArgs);\r
\r
int exitStatus = main(argc, argv, NULL);\r