[Python-checkins] r51820 - in python/trunk: Lib/ctypes/test/test_cast.py Modules/_ctypes/_ctypes.c
thomas.heller
python-checkins at python.org
Thu Sep 7 21:09:55 CEST 2006
Author: thomas.heller
Date: Thu Sep 7 21:09:54 2006
New Revision: 51820
Modified:
python/trunk/Lib/ctypes/test/test_cast.py
python/trunk/Modules/_ctypes/_ctypes.c
Log:
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.
Modified: python/trunk/Lib/ctypes/test/test_cast.py
==============================================================================
--- python/trunk/Lib/ctypes/test/test_cast.py (original)
+++ python/trunk/Lib/ctypes/test/test_cast.py Thu Sep 7 21:09:54 2006
@@ -57,5 +57,21 @@
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()
Modified: python/trunk/Modules/_ctypes/_ctypes.c
==============================================================================
--- python/trunk/Modules/_ctypes/_ctypes.c (original)
+++ python/trunk/Modules/_ctypes/_ctypes.c Thu Sep 7 21:09:54 2006
@@ -4597,11 +4597,11 @@
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;
More information about the Python-checkins
mailing list