Commit 7775c716 authored by Thomas Heller's avatar Thomas Heller

Accept bytes as parameter to foreign functions without prototype.

These are passed as byte strings (unicode strings are passed as wide
character strings).
parent 60831316
...@@ -37,7 +37,7 @@ class SlicesTestCase(unittest.TestCase): ...@@ -37,7 +37,7 @@ class SlicesTestCase(unittest.TestCase):
from ctypes.test import is_resource_enabled from ctypes.test import is_resource_enabled
if is_resource_enabled("struni-crash"): if is_resource_enabled("struni-crash"):
def test_char_ptr(self): def test_char_ptr(self):
s = "abcdefghijklmnopqrstuvwxyz" s = b"abcdefghijklmnopqrstuvwxyz"
dll = CDLL(_ctypes_test.__file__) dll = CDLL(_ctypes_test.__file__)
dll.my_strdup.restype = POINTER(c_char) dll.my_strdup.restype = POINTER(c_char)
...@@ -57,7 +57,7 @@ class SlicesTestCase(unittest.TestCase): ...@@ -57,7 +57,7 @@ class SlicesTestCase(unittest.TestCase):
def test_char_ptr_with_free(self): def test_char_ptr_with_free(self):
dll = CDLL(_ctypes_test.__file__) dll = CDLL(_ctypes_test.__file__)
s = "abcdefghijklmnopqrstuvwxyz" s = b"abcdefghijklmnopqrstuvwxyz"
class allocated_c_char_p(c_char_p): class allocated_c_char_p(c_char_p):
pass pass
......
...@@ -512,6 +512,7 @@ static int ConvParam(PyObject *obj, Py_ssize_t index, struct argument *pa) ...@@ -512,6 +512,7 @@ static int ConvParam(PyObject *obj, Py_ssize_t index, struct argument *pa)
return 0; return 0;
} }
/* XXX struni remove later */
if (PyString_Check(obj)) { if (PyString_Check(obj)) {
pa->ffi_type = &ffi_type_pointer; pa->ffi_type = &ffi_type_pointer;
pa->value.p = PyString_AS_STRING(obj); pa->value.p = PyString_AS_STRING(obj);
...@@ -520,6 +521,14 @@ static int ConvParam(PyObject *obj, Py_ssize_t index, struct argument *pa) ...@@ -520,6 +521,14 @@ static int ConvParam(PyObject *obj, Py_ssize_t index, struct argument *pa)
return 0; 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 #ifdef CTYPES_UNICODE
if (PyUnicode_Check(obj)) { if (PyUnicode_Check(obj)) {
#ifdef HAVE_USABLE_WCHAR_T #ifdef HAVE_USABLE_WCHAR_T
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment