mirror of
https://github.com/python/cpython.git
synced 2025-12-15 21:44:50 +00:00
Accept bytes as parameter to foreign functions without prototype.
These are passed as byte strings (unicode strings are passed as wide character strings).
This commit is contained in:
parent
60831316df
commit
7775c716fc
2 changed files with 11 additions and 2 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue