diff options
-rw-r--r-- | Lib/ctypes/test/test_slicing.py | 4 | ||||
-rw-r--r-- | Modules/_ctypes/callproc.c | 9 |
2 files changed, 11 insertions, 2 deletions
diff --git a/Lib/ctypes/test/test_slicing.py b/Lib/ctypes/test/test_slicing.py index 3db82c3..ab01c18 100644 --- a/Lib/ctypes/test/test_slicing.py +++ b/Lib/ctypes/test/test_slicing.py @@ -37,7 +37,7 @@ class SlicesTestCase(unittest.TestCase): from ctypes.test import is_resource_enabled if is_resource_enabled("struni-crash"): def test_char_ptr(self): - s = "abcdefghijklmnopqrstuvwxyz" + s = b"abcdefghijklmnopqrstuvwxyz" dll = CDLL(_ctypes_test.__file__) dll.my_strdup.restype = POINTER(c_char) @@ -57,7 +57,7 @@ class SlicesTestCase(unittest.TestCase): def test_char_ptr_with_free(self): dll = CDLL(_ctypes_test.__file__) - s = "abcdefghijklmnopqrstuvwxyz" + s = b"abcdefghijklmnopqrstuvwxyz" class allocated_c_char_p(c_char_p): pass diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 23150b3..6380b1a 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -512,6 +512,7 @@ static int ConvParam(PyObject *obj, Py_ssize_t index, struct argument *pa) return 0; } + /* XXX struni remove later */ if (PyString_Check(obj)) { pa->ffi_type = &ffi_type_pointer; pa->value.p = PyString_AS_STRING(obj); @@ -520,6 +521,14 @@ static int ConvParam(PyObject *obj, Py_ssize_t index, struct argument *pa) return 0; } + if (PyBytes_Check(obj)) { + pa->ffi_type = &ffi_type_pointer; + pa->value.p = PyBytes_AsString(obj); + Py_INCREF(obj); + pa->keep = obj; + return 0; + } + #ifdef CTYPES_UNICODE if (PyUnicode_Check(obj)) { #ifdef HAVE_USABLE_WCHAR_T |