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()
|
||||
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()
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue