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