From: Thomas Heller Date: Fri, 13 Jul 2007 13:59:39 +0000 (+0000) Subject: Repair COMError. Since exceptions are new style classes now, setting X-Git-Tag: v2.6a1~1574 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1421b001625b1108d4c8899c821acf8bf444f714;p=python Repair COMError. Since exceptions are new style classes now, setting the methods and docstring after the type creation does not work, they must be in the dictionary before creating the type. --- diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 34b6829a9c..8eeb865647 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -4520,11 +4520,6 @@ create_comerror(void) PyObject *s; int status; - ComError = PyErr_NewException("_ctypes.COMError", - NULL, - dict); - if (ComError == NULL) - return -1; while (methods->ml_name) { /* get a wrapper for the built-in function */ PyObject *func = PyCFunction_New(methods, NULL); @@ -4539,13 +4534,24 @@ create_comerror(void) Py_DECREF(meth); ++methods; } - Py_INCREF(ComError); + s = PyString_FromString(comerror_doc); if (s == NULL) return -1; status = PyDict_SetItemString(dict, "__doc__", s); Py_DECREF(s); - return status; + if (status == -1) { + Py_DECREF(dict); + return -1; + } + + ComError = PyErr_NewException("_ctypes.COMError", + NULL, + dict); + if (ComError == NULL) + return -1; + + return 0; } #endif