summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2007-07-13 13:59:39 +0000
committerThomas Heller <theller@ctypes.org>2007-07-13 13:59:39 +0000
commit1421b001625b1108d4c8899c821acf8bf444f714 (patch)
tree2cba72475f6b74ab586855db38cf9e18fc10dcde
parent928713c740c282063fc47c0c28f128f3ebd619e9 (diff)
downloadcpython-git-1421b001625b1108d4c8899c821acf8bf444f714.tar.gz
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.
-rw-r--r--Modules/_ctypes/_ctypes.c20
1 files changed, 13 insertions, 7 deletions
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