diff Modules/main.c @ 43048:6500c8bd7fea

Implement PYTHONNOERRORWINDOW.
author Martin v. Löwis <martin@v.loewis.de>
date Thu, 30 Aug 2007 14:57:25 +0000
parents 27f0289b6835
children 43077c279d17
line wrap: on
line diff
--- a/Modules/main.c	Thu Aug 30 14:51:05 2007 +0000
+++ b/Modules/main.c	Thu Aug 30 14:57:25 2007 +0000
@@ -9,11 +9,16 @@
 #endif
 
 #if defined(MS_WINDOWS) || defined(__CYGWIN__)
+#include <windows.h>
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
 #endif
 #endif
 
+#ifdef _MSC_VER
+#include <crtdbg.h>
+#endif
+
 #if (defined(PYOS_OS2) && !defined(PYCC_GCC)) || defined(MS_WINDOWS)
 #define PYTHONHOMEHELP "<prefix>\\lib"
 #else
@@ -323,6 +328,25 @@
 	    (p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0')
 		unbuffered = 1;
 
+#ifdef MS_WINDOWS
+	if ((p = Py_GETENV("PYTHONNOERRORWINDOW")) && *p != '\0') {
+		/* Disable all error windows created by the sytem
+		   or the CRT. */
+#if defined(_DEBUG) && defined(_MSC_VER)
+		int types[] = {_CRT_WARN, _CRT_ERROR, _CRT_ASSERT};
+		int i;
+		for (i = 0; i < sizeof(types)/sizeof(types[0]); i++) {
+		    _CrtSetReportFile(types[i], _CRTDBG_FILE_STDERR);
+		    _CrtSetReportMode(types[i], _CRTDBG_MODE_FILE);
+		}
+		_set_error_mode(_OUT_TO_STDERR);
+#endif
+		SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT |
+			     SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
+	}
+#endif
+
+
 	if (command == NULL && module == NULL && _PyOS_optind < argc &&
 	    strcmp(argv[_PyOS_optind], "-") != 0)
 	{