diff --git a/windows/init.c b/windows/init.c index d4533f9b47..6690923478 100644 --- a/windows/init.c +++ b/windows/init.c @@ -27,11 +27,31 @@ #include #include #include +#ifdef _MSC_VER +#include +#endif #include "sleep.h" extern BOOL WINAPI console_sighandler(DWORD evt); +#ifdef _MSC_VER +void invalid_param_handler(const wchar_t *expr, const wchar_t *fun, const wchar_t *file, unsigned int line, uintptr_t p) { +} +#endif + void init() { +#ifdef _MSC_VER + // Disable the 'Debug Error!' dialog for assertions failures and the likes, + // instead write messages to the debugger output and terminate. + _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG); + _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG); + _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG); + + // Disable 'invalid parameter handling' which is for instance invoked when + // passing invalid file descriptors to functions like lseek() and make the + // functions called behave properly by setting errno to EBADF/EINVAL/.. + _set_invalid_parameter_handler(invalid_param_handler); +#endif SetConsoleCtrlHandler(console_sighandler, TRUE); init_sleep(); #ifdef __MINGW32__