]> granicus.if.org Git - python/commitdiff
c_void_p.from_param accepts bytes. Fix test_prototypes.
authorThomas Heller <theller@ctypes.org>
Thu, 12 Jul 2007 19:38:33 +0000 (19:38 +0000)
committerThomas Heller <theller@ctypes.org>
Thu, 12 Jul 2007 19:38:33 +0000 (19:38 +0000)
Lib/ctypes/test/test_prototypes.py
Modules/_ctypes/_ctypes.c

index b14d2d8690577a3443f4b0cfe2795dd93777c513..91b7e0da7d09b3ade51507cf925d6d2c4bdd4c64 100644 (file)
@@ -104,7 +104,7 @@ class CharPointersTestCase(unittest.TestCase):
         func.argtypes = c_void_p,
 
         self.failUnlessEqual(None, func(None))
-        self.failUnlessEqual("123", func("123"))
+        self.failUnlessEqual("123", func(b"123"))
         self.failUnlessEqual("123", func(c_char_p("123")))
         self.failUnlessEqual(None, func(c_char_p(None)))
 
index d6a435d614ee4613489b7c1e6797fef18e16b1d6..5b114804e5bcc96b89003851cd518e42523c27a3 100644 (file)
@@ -1268,11 +1268,29 @@ c_void_p_from_param(PyObject *type, PyObject *value)
                }
                return (PyObject *)parg;
        }
+       /* XXX struni: remove later */
 /* string */
        if (PyString_Check(value)) {
                PyCArgObject *parg;
                struct fielddesc *fd = getentry("z");
 
+               parg = new_CArgObject();
+               if (parg == NULL)
+                       return NULL;
+               parg->pffi_type = &ffi_type_pointer;
+               parg->tag = 'z';
+               parg->obj = fd->setfunc(&parg->value, value, 0);
+               if (parg->obj == NULL) {
+                       Py_DECREF(parg);
+                       return NULL;
+               }
+               return (PyObject *)parg;
+       }
+/* bytes */
+       if (PyBytes_Check(value)) {
+               PyCArgObject *parg;
+               struct fielddesc *fd = getentry("z");
+
                parg = new_CArgObject();
                if (parg == NULL)
                        return NULL;