--- /dev/null
+It is no longer possible to build the ``_ctypes`` extension module without
+:c:type:`wchar_t` type: remove ``CTYPES_UNICODE`` macro. Anyway, the
+:c:type:`wchar_t` type is required to build Python. Patch by Victor Stinner.
{ NULL, NULL }
};
-#ifdef CTYPES_UNICODE
static PyObject *
WCharArray_get_value(CDataObject *self, void *Py_UNUSED(ignored))
{
"string value"},
{ NULL, NULL }
};
-#endif
/*
The next three functions copied from Python's typeobject.c.
if (itemdict->getfunc == _ctypes_get_fielddesc("c")->getfunc) {
if (-1 == add_getset(result, CharArray_getsets))
goto error;
-#ifdef CTYPES_UNICODE
- } else if (itemdict->getfunc == _ctypes_get_fielddesc("u")->getfunc) {
+ }
+ else if (itemdict->getfunc == _ctypes_get_fielddesc("u")->getfunc) {
if (-1 == add_getset(result, WCharArray_getsets))
goto error;
-#endif
}
return (PyObject *)result;
PyMem_Free(dest);
return np;
}
-#ifdef CTYPES_UNICODE
if (itemdict->getfunc == _ctypes_get_fielddesc("u")->getfunc) {
wchar_t *ptr = (wchar_t *)self->b_ptr;
wchar_t *dest;
PyMem_Free(dest);
return np;
}
-#endif
np = PyList_New(slicelen);
if (np == NULL)
PyMem_Free(dest);
return np;
}
-#ifdef CTYPES_UNICODE
if (itemdict->getfunc == _ctypes_get_fielddesc("u")->getfunc) {
wchar_t *ptr = *(wchar_t **)self->b_ptr;
wchar_t *dest;
PyMem_Free(dest);
return np;
}
-#endif
np = PyList_New(len);
if (np == NULL)
return NULL;
}
-#ifdef CTYPES_UNICODE
+
static PyObject *
wstring_at(const wchar_t *ptr, int size)
{
ssize = wcslen(ptr);
return PyUnicode_FromWideChar(ptr, ssize);
}
-#endif
static struct PyModuleDef _ctypesmodule = {
MOD_ADD("_memset_addr", PyLong_FromVoidPtr(memset));
MOD_ADD("_string_at_addr", PyLong_FromVoidPtr(string_at));
MOD_ADD("_cast_addr", PyLong_FromVoidPtr(cast));
-#ifdef CTYPES_UNICODE
MOD_ADD("_wstring_at_addr", PyLong_FromVoidPtr(wstring_at));
-#endif
/* If RTLD_LOCAL is not defined (Windows!), set it to zero. */
#if !HAVE_DECL_RTLD_LOCAL
return 0;
}
-#ifdef CTYPES_UNICODE
if (PyUnicode_Check(obj)) {
pa->ffi_type = &ffi_type_pointer;
pa->value.p = PyUnicode_AsWideCharString(obj, NULL);
}
return 0;
}
-#endif
{
_Py_IDENTIFIER(_as_parameter_);
getfunc = fd->getfunc;
setfunc = fd->setfunc;
}
-#ifdef CTYPES_UNICODE
if (idict->getfunc == _ctypes_get_fielddesc("u")->getfunc) {
struct fielddesc *fd = _ctypes_get_fielddesc("U");
getfunc = fd->getfunc;
setfunc = fd->setfunc;
}
-#endif
}
}
return PyBytes_FromStringAndSize((char *)ptr, 1);
}
-#ifdef CTYPES_UNICODE
/* u - a single wchar_t character */
static PyObject *
u_set(void *ptr, PyObject *value, Py_ssize_t size)
return value;
}
-#endif
static PyObject *
s_get(void *ptr, Py_ssize_t size)
}
}
-#ifdef CTYPES_UNICODE
static PyObject *
Z_set(void *ptr, PyObject *value, Py_ssize_t size)
{
Py_RETURN_NONE;
}
}
-#endif
+
#ifdef MS_WIN32
static PyObject *
#endif
{ 'P', P_set, P_get, &ffi_type_pointer},
{ 'z', z_set, z_get, &ffi_type_pointer},
-#ifdef CTYPES_UNICODE
{ 'u', u_set, u_get, NULL}, /* ffi_type set later */
{ 'U', U_set, U_get, &ffi_type_pointer},
{ 'Z', Z_set, Z_get, &ffi_type_pointer},
-#endif
#ifdef MS_WIN32
{ 'X', BSTR_set, BSTR_get, &ffi_type_pointer},
#endif
if (!initialized) {
initialized = 1;
-#ifdef CTYPES_UNICODE
if (sizeof(wchar_t) == sizeof(short))
_ctypes_get_fielddesc("u")->pffi_type = &ffi_type_sshort;
else if (sizeof(wchar_t) == sizeof(int))
_ctypes_get_fielddesc("u")->pffi_type = &ffi_type_sint;
else if (sizeof(wchar_t) == sizeof(long))
_ctypes_get_fielddesc("u")->pffi_type = &ffi_type_slong;
-#endif
}
for (; table->code; ++table) {
extern char *_ctypes_conversion_encoding;
extern char *_ctypes_conversion_errors;
-#if defined(HAVE_WCHAR_H)
-# define CTYPES_UNICODE
-#endif
-
extern void _ctypes_free_closure(void *);
extern void *_ctypes_alloc_closure(void);
case FFI_TYPE_SINT16:
case FFI_TYPE_SINT32:
if (dict->getfunc != _ctypes_get_fielddesc("c")->getfunc
-#ifdef CTYPES_UNICODE
&& dict->getfunc != _ctypes_get_fielddesc("u")->getfunc
-#endif
)
break;
/* else fall through */