Backport rev 51820 from Thomas Heller

The cast function did not accept c_char_p or c_wchar_p instances
as first argument, and failed with a 'bad argument to internal function'
error message.
This commit is contained in:
Neal Norwitz 2006-09-11 04:02:43 +00:00
parent 71e2aa0cc5
commit 5728c27c74
2 changed files with 18 additions and 2 deletions

View File

@ -57,5 +57,21 @@ class Test(unittest.TestCase):
c_int()
self.failUnlessEqual(p[:4], [1, 2, 96, 4])
def test_char_p(self):
# This didn't work: bad argument to internal function
s = c_char_p("hiho")
self.failUnlessEqual(cast(cast(s, c_void_p), c_char_p).value,
"hiho")
try:
c_wchar_p
except NameError:
pass
else:
def test_wchar_p(self):
s = c_wchar_p("hiho")
self.failUnlessEqual(cast(cast(s, c_void_p), c_wchar_p).value,
"hiho")
if __name__ == "__main__":
unittest.main()

View File

@ -4590,11 +4590,11 @@ cast(void *ptr, PyObject *src, PyObject *ctype)
if (obj->b_objects == NULL)
goto failed;
}
Py_XINCREF(obj->b_objects);
result->b_objects = obj->b_objects;
if (result->b_objects) {
if (result->b_objects && PyDict_Check(result->b_objects)) {
PyObject *index;
int rc;
Py_INCREF(obj->b_objects);
index = PyLong_FromVoidPtr((void *)src);
if (index == NULL)
goto failed;