Author: martin.v.loewis
Date: Fri Aug 31 09:58:36 2007
New Revision: 57823

Modified:
   python/branches/py3k/Lib/test/regrtest.py
   python/branches/py3k/Modules/main.c
   python/branches/py3k/PC/msvcrtmodule.c
   python/branches/py3k/Tools/buildbot/test.bat
Log:
Revert 57722. Move error dialog APIs to msvcrt instead,
add -n option to regrtest, and use it on the buildbot.

Modified: python/branches/py3k/Lib/test/regrtest.py
==============================================================================
--- python/branches/py3k/Lib/test/regrtest.py   (original)
+++ python/branches/py3k/Lib/test/regrtest.py   Fri Aug 31 09:58:36 2007
@@ -28,6 +28,7 @@
 -L: runleaks   -- run the leaks(1) command just before exit
 -R: huntrleaks -- search for reference leaks (needs debug build, v. slow)
 -M: memlimit   -- run very large memory-consuming tests
+-n: nowindows  -- suppress error message boxes on Windows
 
 If non-option arguments are present, they are names for tests to run,
 unless -x is given, in which case they are names for tests not to run.
@@ -210,13 +211,13 @@
 
     test_support.record_original_stdout(sys.stdout)
     try:
-        opts, args = getopt.getopt(sys.argv[1:], 'dhvgqxsS:rf:lu:t:TD:NLR:wM:',
+        opts, args = getopt.getopt(sys.argv[1:], 
'dhvgqxsS:rf:lu:t:TD:NLR:wM:n',
                                    ['help', 'verbose', 'quiet', 'generate',
                                     'exclude', 'single', 'random', 'fromfile',
                                     'findleaks', 'use=', 'threshold=', 'trace',
                                     'coverdir=', 'nocoverdir', 'runleaks',
                                     'huntrleaks=', 'verbose2', 'memlimit=',
-                                    'debug', 'start='
+                                    'debug', 'start=', "nowindows"
                                     ])
     except getopt.error as msg:
         usage(msg)
@@ -296,6 +297,21 @@
                         use_resources.remove(r)
                 elif r not in use_resources:
                     use_resources.append(r)
+        elif o in ('-n', '--nowindows'):
+            import msvcrt
+            msvcrt.SetErrorMode(msvcrt.SEM_FAILCRITICALERRORS|
+                    msvcrt.SEM_NOALIGNMENTFAULTEXCEPT|
+                    msvcrt.SEM_NOGPFAULTERRORBOX|
+                    msvcrt.SEM_NOOPENFILEERRORBOX)
+            try:
+                msvcrt.CrtSetReportMode
+            except AttributeError:
+                # release build
+                pass
+            else:
+                for m in [msvcrt.CRT_WARN, msvcrt.CRT_ERROR, 
msvcrt.CRT_ASSERT]:
+                    msvcrt.CrtSetReportMode(m, msvcrt.CRTDBG_MODE_FILE)
+                    msvcrt.CrtSetReportFile(m, msvcrt.CRTDBG_FILE_STDERR)
     if generate and verbose:
         usage("-g and -v don't go together!")
     if single and fromfile:

Modified: python/branches/py3k/Modules/main.c
==============================================================================
--- python/branches/py3k/Modules/main.c (original)
+++ python/branches/py3k/Modules/main.c Fri Aug 31 09:58:36 2007
@@ -328,25 +328,6 @@
            (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)
        {

Modified: python/branches/py3k/PC/msvcrtmodule.c
==============================================================================
--- python/branches/py3k/PC/msvcrtmodule.c      (original)
+++ python/branches/py3k/PC/msvcrtmodule.c      Fri Aug 31 09:58:36 2007
@@ -21,6 +21,8 @@
 #include <io.h>
 #include <conio.h>
 #include <sys/locking.h>
+#include <crtdbg.h>
+#include <windows.h>
 
 // Force the malloc heap to clean itself up, and free unused blocks
 // back to the OS.  (According to the docs, only works on NT.)
@@ -201,6 +203,60 @@
        }
 }
 
+#ifdef _DEBUG
+
+static PyObject*
+msvcrt_setreportfile(PyObject *self, PyObject *args)
+{
+       int type, file;
+       _HFILE res;
+
+       if (!PyArg_ParseTuple(args, "ii", &type, &file))
+               return NULL;
+       res = _CrtSetReportFile(type, (_HFILE)file);
+       return PyInt_FromLong((long)res);
+       Py_INCREF(Py_None);
+       return Py_None;
+}
+
+static PyObject*
+msvcrt_setreportmode(PyObject *self, PyObject *args)
+{
+       int type, mode;
+       int res;
+
+       if (!PyArg_ParseTuple(args, "ii", &type, &mode))
+               return NULL;
+       res = _CrtSetReportMode(type, mode);
+       if (res == -1)
+           return PyErr_SetFromErrno(PyExc_IOError);
+       return PyLong_FromLong(res);
+}
+
+static PyObject*
+msvcrt_seterrormode(PyObject *self, PyObject *args)
+{
+       int mode, res;
+
+       if (!PyArg_ParseTuple(args, "i", &mode))
+               return NULL;
+       res = _set_error_mode(mode);
+       return PyLong_FromLong(res);
+}
+
+#endif
+
+static PyObject*
+seterrormode(PyObject *self, PyObject *args)
+{
+       unsigned int mode, res;
+
+       if (!PyArg_ParseTuple(args, "I", &mode))
+               return NULL;
+       res = SetErrorMode(mode);
+       return PyLong_FromUnsignedLong(res);
+}
+
 
 /* List of functions exported by this module */
 static struct PyMethodDef msvcrt_functions[] = {
@@ -214,6 +270,12 @@
        {"getche",              msvcrt_getche, METH_VARARGS},
        {"putch",               msvcrt_putch, METH_VARARGS},
        {"ungetch",             msvcrt_ungetch, METH_VARARGS},
+       {"SetErrorMode",        seterrormode, METH_VARARGS},
+#ifdef _DEBUG
+       {"CrtSetReportFile",    msvcrt_setreportfile, METH_VARARGS},
+       {"CrtSetReportMode",    msvcrt_setreportmode, METH_VARARGS},
+       {"set_error_mode",      msvcrt_seterrormode, METH_VARARGS},
+#endif
        {NULL,                  NULL}
 };
 
@@ -232,4 +294,20 @@
        insertint(d, "LK_NBRLCK", _LK_NBRLCK);
        insertint(d, "LK_RLCK", _LK_RLCK);
        insertint(d, "LK_UNLCK", _LK_UNLCK);
+       insertint(d, "SEM_FAILCRITICALERRORS", SEM_FAILCRITICALERRORS);
+       insertint(d, "SEM_NOALIGNMENTFAULTEXCEPT", SEM_NOALIGNMENTFAULTEXCEPT);
+       insertint(d, "SEM_NOGPFAULTERRORBOX", SEM_NOGPFAULTERRORBOX);
+       insertint(d, "SEM_NOOPENFILEERRORBOX", SEM_NOOPENFILEERRORBOX);
+#ifdef _DEBUG
+       insertint(d, "CRT_WARN", _CRT_WARN);
+       insertint(d, "CRT_ERROR", _CRT_ERROR);
+       insertint(d, "CRT_ASSERT", _CRT_ASSERT);
+       insertint(d, "CRTDBG_MODE_DEBUG", _CRTDBG_MODE_DEBUG);
+       insertint(d, "CRTDBG_MODE_FILE", _CRTDBG_MODE_FILE);
+       insertint(d, "CRTDBG_MODE_WNDW", _CRTDBG_MODE_WNDW);
+       insertint(d, "CRTDBG_REPORT_MODE", _CRTDBG_REPORT_MODE);
+       insertint(d, "CRTDBG_FILE_STDERR", (int)_CRTDBG_FILE_STDERR);
+       insertint(d, "CRTDBG_FILE_STDOUT", (int)_CRTDBG_FILE_STDOUT);
+       insertint(d, "CRTDBG_REPORT_FILE", (int)_CRTDBG_REPORT_FILE);
+#endif
 }

Modified: python/branches/py3k/Tools/buildbot/test.bat
==============================================================================
--- python/branches/py3k/Tools/buildbot/test.bat        (original)
+++ python/branches/py3k/Tools/buildbot/test.bat        Fri Aug 31 09:58:36 2007
@@ -1,4 +1,3 @@
 @rem Used by the buildbot "test" step.
 cd PCbuild
-set PYTHONNOERRORWINDOW=1
-call rt.bat -d -q -uall -rw
+call rt.bat -d -q -uall -rw -n
_______________________________________________
Python-3000-checkins mailing list
Python-3000-checkins@python.org
http://mail.python.org/mailman/listinfo/python-3000-checkins

Reply via email to