diff options
author | Thomas Heller <theller@ctypes.org> | 2007-07-12 19:19:43 (GMT) |
---|---|---|
committer | Thomas Heller <theller@ctypes.org> | 2007-07-12 19:19:43 (GMT) |
commit | 7775c716fcf28346e2e79238d6e5080d5a1bcc81 (patch) | |
tree | e5adb2863214cf0e308006e60b27c9afcd45aeed | |
parent | 60831316df8893e973f92592b7c4c95ad489ff15 (diff) | |
download | cpython-7775c716fcf28346e2e79238d6e5080d5a1bcc81.zip cpython-7775c716fcf28346e2e79238d6e5080d5a1bcc81.tar.gz cpython-7775c716fcf28346e2e79238d6e5080d5a1bcc81.tar.bz2 |
Accept bytes as parameter to foreign functions without prototype.
These are passed as byte strings (unicode strings are passed as wide
character strings).
-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 |