Do not accept str8 type in function calls any longer.

Accept bytes instead of str8 in the (unexposed in ctypes) BSTR type.
This commit is contained in:
Thomas Heller 2007-07-13 12:07:59 +00:00
parent ace05054d3
commit 27384da6e8
3 changed files with 11 additions and 10 deletions

View file

@ -1,5 +1,6 @@
"""Test where byte objects are accepted"""
import unittest
import sys
from ctypes import *
class BytesTest(unittest.TestCase):
@ -37,5 +38,14 @@ class BytesTest(unittest.TestCase):
X("abc")
X(b"abc")
if sys.platform == "win32":
def test_BSTR(self):
from _ctypes import _SimpleCData
class BSTR(_SimpleCData):
_type_ = "X"
BSTR("abc")
BSTR(b"abc")
if __name__ == '__main__':
unittest.main()

View file

@ -507,15 +507,6 @@ 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);
Py_INCREF(obj);
pa->keep = obj;
return 0;
}
if (PyBytes_Check(obj)) {
pa->ffi_type = &ffi_type_pointer;
pa->value.p = PyBytes_AsString(obj);

View file

@ -1501,7 +1501,7 @@ BSTR_set(void *ptr, PyObject *value, Py_ssize_t size)
/* convert value into a PyUnicodeObject or NULL */
if (Py_None == value) {
value = NULL;
} else if (PyString_Check(value)) {
} else if (PyBytes_Check(value)) {
value = PyUnicode_FromEncodedObject(value,
conversion_mode_encoding,
conversion_mode_errors);