Commit 5fa3f051 authored by Thomas Heller's avatar Thomas Heller

Py_USING_UNICODE is no longer defined on Windows (on posix it is still

in pyconfig.h).  Remove the workaround for the broken (in Python 2.3)
PyUnicode_(From|As)WideChar functions.
parent e409b979
......@@ -4828,72 +4828,6 @@ init_ctypes(void)
init_callbacks_in_module(m);
}
/*****************************************************************
* replacements for broken Python api functions (in Python 2.3).
* See #1047269 Buffer overwrite in PyUnicode_AsWideChar
*/
#ifdef HAVE_WCHAR_H
PyObject *My_PyUnicode_FromWideChar(register const wchar_t *w,
Py_ssize_t size)
{
PyUnicodeObject *unicode;
if (w == NULL) {
PyErr_BadInternalCall();
return NULL;
}
unicode = (PyUnicodeObject *)PyUnicode_FromUnicode(NULL, size);
if (!unicode)
return NULL;
/* Copy the wchar_t data into the new object */
#ifdef HAVE_USABLE_WCHAR_T
memcpy(unicode->str, w, size * sizeof(wchar_t));
#else
{
register Py_UNICODE *u;
register int i;
u = PyUnicode_AS_UNICODE(unicode);
/* In Python, the following line has a one-off error */
for (i = size; i > 0; i--)
*u++ = *w++;
}
#endif
return (PyObject *)unicode;
}
Py_ssize_t My_PyUnicode_AsWideChar(PyUnicodeObject *unicode,
register wchar_t *w,
Py_ssize_t size)
{
if (unicode == NULL) {
PyErr_BadInternalCall();
return -1;
}
if (size > PyUnicode_GET_SIZE(unicode))
size = PyUnicode_GET_SIZE(unicode);
#ifdef HAVE_USABLE_WCHAR_T
memcpy(w, unicode->str, size * sizeof(wchar_t));
#else
{
register Py_UNICODE *u;
register int i;
u = PyUnicode_AS_UNICODE(unicode);
/* In Python, the following line has a one-off error */
for (i = size; i > 0; i--)
*w++ = *u++;
}
#endif
return size;
}
#endif
/*
Local Variables:
compile-command: "cd .. && python setup.py -q build -g && python setup.py -q build install --home ~"
......
......@@ -368,24 +368,11 @@ extern char *conversion_mode_errors;
} while (0)
#endif
/* Python's PyUnicode_*WideChar functions are broken ... */
#if defined(Py_USING_UNICODE) && defined(HAVE_WCHAR_H)
#if defined(HAVE_WCHAR_H)
# define CTYPES_UNICODE
#endif
#ifdef CTYPES_UNICODE
# undef PyUnicode_FromWideChar
# define PyUnicode_FromWideChar My_PyUnicode_FromWideChar
# undef PyUnicode_AsWideChar
# define PyUnicode_AsWideChar My_PyUnicode_AsWideChar
extern PyObject *My_PyUnicode_FromWideChar(const wchar_t *, Py_ssize_t);
extern Py_ssize_t My_PyUnicode_AsWideChar(PyUnicodeObject *, wchar_t *, Py_ssize_t);
#endif
extern void FreeClosure(void *);
extern void *MallocClosure(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment