From: Thomas Heller Date: Thu, 12 Jul 2007 19:19:43 +0000 (+0000) Subject: Accept bytes as parameter to foreign functions without prototype. X-Git-Tag: v3.0a1~661 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7775c716fcf28346e2e79238d6e5080d5a1bcc81;p=python Accept bytes as parameter to foreign functions without prototype. These are passed as byte strings (unicode strings are passed as wide character strings). --- diff --git a/Lib/ctypes/test/test_slicing.py b/Lib/ctypes/test/test_slicing.py index 3db82c3aec..ab01c18028 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 23150b3f57..6380b1ab5f 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