c_void_p.from_param accepts bytes.  Fix test_prototypes.
diff --git a/Lib/ctypes/test/test_prototypes.py b/Lib/ctypes/test/test_prototypes.py
index b14d2d8..91b7e0d 100644
--- a/Lib/ctypes/test/test_prototypes.py
+++ b/Lib/ctypes/test/test_prototypes.py
@@ -104,7 +104,7 @@
         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)))
 
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index d6a435d..5b11480 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -1268,6 +1268,7 @@
 		}
 		return (PyObject *)parg;
 	}
+	/* XXX struni: remove later */
 /* string */
 	if (PyString_Check(value)) {
 		PyCArgObject *parg;
@@ -1285,6 +1286,23 @@
 		}
 		return (PyObject *)parg;
 	}
+/* bytes */
+	if (PyBytes_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;
+	}
 /* unicode */
 	if (PyUnicode_Check(value)) {
 		PyCArgObject *parg;