mirror of https://github.com/python/cpython
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:
parent
71e2aa0cc5
commit
5728c27c74
|
@ -57,5 +57,21 @@ class Test(unittest.TestCase):
|
||||||
c_int()
|
c_int()
|
||||||
self.failUnlessEqual(p[:4], [1, 2, 96, 4])
|
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__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -4590,11 +4590,11 @@ cast(void *ptr, PyObject *src, PyObject *ctype)
|
||||||
if (obj->b_objects == NULL)
|
if (obj->b_objects == NULL)
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
Py_XINCREF(obj->b_objects);
|
||||||
result->b_objects = obj->b_objects;
|
result->b_objects = obj->b_objects;
|
||||||
if (result->b_objects) {
|
if (result->b_objects && PyDict_Check(result->b_objects)) {
|
||||||
PyObject *index;
|
PyObject *index;
|
||||||
int rc;
|
int rc;
|
||||||
Py_INCREF(obj->b_objects);
|
|
||||||
index = PyLong_FromVoidPtr((void *)src);
|
index = PyLong_FromVoidPtr((void *)src);
|
||||||
if (index == NULL)
|
if (index == NULL)
|
||||||
goto failed;
|
goto failed;
|
||||||
|
|
Loading…
Reference in New Issue