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:
Thomas Heller 2007-07-12 19:19:43 +00:00
parent 60831316df
commit 7775c716fc
2 changed files with 11 additions and 2 deletions

View file

@ -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

View file

@ -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