summaryrefslogtreecommitdiffstats
path: root/Modules/_ctypes
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2007-07-12 15:41:51 (GMT)
committerThomas Heller <theller@ctypes.org>2007-07-12 15:41:51 (GMT)
commit2c5e96465faa2e79b60f21b10422a6a30281cdb8 (patch)
tree7489bd6a38337fc58946eb5e6a6146c40d970d05 /Modules/_ctypes
parent3af4266d07c38a136858acd63fe663d24590400c (diff)
downloadcpython-2c5e96465faa2e79b60f21b10422a6a30281cdb8.zip
cpython-2c5e96465faa2e79b60f21b10422a6a30281cdb8.tar.gz
cpython-2c5e96465faa2e79b60f21b10422a6a30281cdb8.tar.bz2
Accept bytes in c_char_p and c_wchar_p types.
Diffstat (limited to 'Modules/_ctypes')
-rw-r--r--Modules/_ctypes/cfield.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c
index 75b00b6..a8d0d4b 100644
--- a/Modules/_ctypes/cfield.c
+++ b/Modules/_ctypes/cfield.c
@@ -1354,8 +1354,8 @@ z_set(void *ptr, PyObject *value, Py_ssize_t size)
Py_INCREF(value);
return value;
}
- if (PyString_Check(value)) {
- *(char **)ptr = PyString_AS_STRING(value);
+ if (PyBytes_Check(value)) {
+ *(char **)ptr = PyBytes_AsString(value);
Py_INCREF(value);
return value;
} else if (PyUnicode_Check(value)) {
@@ -1410,13 +1410,7 @@ Z_set(void *ptr, PyObject *value, Py_ssize_t size)
Py_INCREF(value);
return value;
}
- if (PyString_Check(value)) {
- value = PyUnicode_FromEncodedObject(value,
- conversion_mode_encoding,
- conversion_mode_errors);
- if (!value)
- return NULL;
- } else if (PyInt_Check(value) || PyLong_Check(value)) {
+ if (PyInt_Check(value) || PyLong_Check(value)) {
#if SIZEOF_VOID_P == SIZEOF_LONG_LONG
*(wchar_t **)ptr = (wchar_t *)PyInt_AsUnsignedLongLongMask(value);
#else
@@ -1424,6 +1418,13 @@ Z_set(void *ptr, PyObject *value, Py_ssize_t size)
#endif
Py_INCREF(Py_None);
return Py_None;
+ }
+ if (PyBytes_Check(value)) {
+ value = PyUnicode_FromEncodedObject(value,
+ conversion_mode_encoding,
+ conversion_mode_errors);
+ if (!value)
+ return NULL;
} else if (!PyUnicode_Check(value)) {
PyErr_Format(PyExc_TypeError,
"unicode string or integer address expected instead of %s instance",