diff options
author | Thomas Heller <theller@ctypes.org> | 2007-07-12 11:00:22 (GMT) |
---|---|---|
committer | Thomas Heller <theller@ctypes.org> | 2007-07-12 11:00:22 (GMT) |
commit | 5fa3f0517b072d6e864d33cfc4fe3f53ea02c702 (patch) | |
tree | 50fa66c65847565ce754d24592f4da51f8e77869 | |
parent | e409b979509af36bbd9ee8ebbc85d805062e2e95 (diff) | |
download | cpython-5fa3f0517b072d6e864d33cfc4fe3f53ea02c702.zip cpython-5fa3f0517b072d6e864d33cfc4fe3f53ea02c702.tar.gz cpython-5fa3f0517b072d6e864d33cfc4fe3f53ea02c702.tar.bz2 |
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.
-rw-r--r-- | Modules/_ctypes/_ctypes.c | 66 | ||||
-rw-r--r-- | Modules/_ctypes/ctypes.h | 15 |
2 files changed, 1 insertions, 80 deletions
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 1e9a3cf..e5c1470 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -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 ~" diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index e74872c..1791089 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -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); |