Fix the way methods are created for the _ctypes.COMError exception
type; this fix is already in the trunk.
This commit is contained in:
parent
e69f2bdbe6
commit
527bf3a826
|
@ -37,6 +37,19 @@ if sys.platform == "win32":
|
|||
# are trapped and raise an exception.
|
||||
self.assertRaises(WindowsError, windll.kernel32.GetModuleHandleA, 32)
|
||||
|
||||
class TestWintypes(unittest.TestCase):
|
||||
|
||||
def test_COMError(self):
|
||||
from _ctypes import COMError
|
||||
self.assertEqual(COMError.__doc__, "Raised when a COM method call failed.")
|
||||
|
||||
ex = COMError(-1, "text", ("details",))
|
||||
self.assertEqual(ex.hresult, -1)
|
||||
self.assertEqual(ex.text, "text")
|
||||
self.assertEqual(ex.details, ("details",))
|
||||
self.assertEqual((ex.hresult, ex.text, ex.details),
|
||||
ex[:])
|
||||
|
||||
class Structures(unittest.TestCase):
|
||||
|
||||
def test_struct_by_value(self):
|
||||
|
|
|
@ -80,6 +80,10 @@ Core and builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Fixed _ctypes.COMError so that it must be called with exactly three
|
||||
arguments, instances now have the hresult, text, and details
|
||||
instance variables.
|
||||
|
||||
- #1507247, #2004: tarfile.py: Use mode 0700 for temporary directories and
|
||||
default permissions for missing directories.
|
||||
|
||||
|
|
|
@ -4520,32 +4520,42 @@ create_comerror(void)
|
|||
PyObject *s;
|
||||
int status;
|
||||
|
||||
ComError = PyErr_NewException("_ctypes.COMError",
|
||||
NULL,
|
||||
dict);
|
||||
if (ComError == NULL)
|
||||
if (dict == NULL)
|
||||
return -1;
|
||||
|
||||
while (methods->ml_name) {
|
||||
/* get a wrapper for the built-in function */
|
||||
PyObject *func = PyCFunction_New(methods, NULL);
|
||||
PyObject *meth;
|
||||
if (func == NULL)
|
||||
return -1;
|
||||
goto error;
|
||||
meth = PyMethod_New(func, NULL, ComError);
|
||||
Py_DECREF(func);
|
||||
if (meth == NULL)
|
||||
return -1;
|
||||
goto error;
|
||||
PyDict_SetItemString(dict, methods->ml_name, meth);
|
||||
Py_DECREF(meth);
|
||||
++methods;
|
||||
}
|
||||
Py_INCREF(ComError);
|
||||
|
||||
s = PyString_FromString(comerror_doc);
|
||||
if (s == NULL)
|
||||
return -1;
|
||||
goto error;
|
||||
status = PyDict_SetItemString(dict, "__doc__", s);
|
||||
Py_DECREF(s);
|
||||
return status;
|
||||
if (status == -1)
|
||||
goto error;
|
||||
|
||||
ComError = PyErr_NewException("_ctypes.COMError",
|
||||
NULL,
|
||||
dict);
|
||||
if (ComError == NULL)
|
||||
goto error;
|
||||
|
||||
return 0;
|
||||
error:
|
||||
Py_DECREF(dict);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue