From b3332660adb02babb7e66e45310c66dc9a9a94da Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Tue, 30 Jun 2020 12:23:07 +0900 Subject: bpo-41123: Remove PyUnicode_AsUnicodeCopy (GH-21209) --- Doc/c-api/unicode.rst | 14 --------- Doc/data/refcounts.dat | 3 -- Doc/whatsnew/3.10.rst | 4 +++ Include/cpython/unicodeobject.h | 8 ------ .../C API/2020-06-29-15-49-36.bpo-41123.wYY4E1.rst | 1 + Objects/unicodeobject.c | 33 ---------------------- 6 files changed, 5 insertions(+), 58 deletions(-) create mode 100644 Misc/NEWS.d/next/C API/2020-06-29-15-49-36.bpo-41123.wYY4E1.rst diff --git a/Doc/c-api/unicode.rst b/Doc/c-api/unicode.rst index b1787ed..0748a1e 100644 --- a/Doc/c-api/unicode.rst +++ b/Doc/c-api/unicode.rst @@ -724,20 +724,6 @@ Extension modules can continue using them, as they will not be removed in Python .. versionadded:: 3.3 -.. c:function:: Py_UNICODE* PyUnicode_AsUnicodeCopy(PyObject *unicode) - - Create a copy of a Unicode string ending with a null code point. Return ``NULL`` - and raise a :exc:`MemoryError` exception on memory allocation failure, - otherwise return a new allocated buffer (use :c:func:`PyMem_Free` to free - the buffer). Note that the resulting :c:type:`Py_UNICODE*` string may - contain embedded null code points, which would cause the string to be - truncated when used in most C functions. - - .. versionadded:: 3.2 - - Please migrate to using :c:func:`PyUnicode_AsUCS4Copy` or similar new APIs. - - .. c:function:: Py_ssize_t PyUnicode_GetSize(PyObject *unicode) Return the size of the deprecated :c:type:`Py_UNICODE` representation, in diff --git a/Doc/data/refcounts.dat b/Doc/data/refcounts.dat index 4d9aee3..882d7d6 100644 --- a/Doc/data/refcounts.dat +++ b/Doc/data/refcounts.dat @@ -2419,9 +2419,6 @@ PyUnicode_AsUnicodeAndSize:Py_UNICODE*::: PyUnicode_AsUnicodeAndSize:PyObject*:unicode:0: PyUnicode_AsUnicodeAndSize:Py_ssize_t*:size:: -PyUnicode_AsUnicodeCopy:Py_UNICODE*::: -PyUnicode_AsUnicodeCopy:PyObject*:unicode:0: - PyUnicode_GetSize:Py_ssize_t::: PyUnicode_GetSize:PyObject*:unicode:0: diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index a755d26..0674ce8 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -240,3 +240,7 @@ Removed * Removed ``PyLong_FromUnicode()``. Please migrate to :c:func:`PyLong_FromUnicodeObject`. (Contributed by Inada Naoki in :issue:`41103`.) + +* Removed ``PyUnicode_AsUnicodeCopy()``. Please use :c:func:`PyUnicode_AsUCS4Copy` or + :c:func:`PyUnicode_AsWideCharString` + (Contributed by Inada Naoki in :issue:`41103`.) diff --git a/Include/cpython/unicodeobject.h b/Include/cpython/unicodeobject.h index c1a8564..88a97a4 100644 --- a/Include/cpython/unicodeobject.h +++ b/Include/cpython/unicodeobject.h @@ -1162,14 +1162,6 @@ PyAPI_FUNC(int) _PyUnicode_IsAlpha( PyAPI_FUNC(PyObject*) _PyUnicode_FormatLong(PyObject *, int, int, int); -/* Create a copy of a unicode string ending with a nul character. Return NULL - and raise a MemoryError exception on memory allocation failure, otherwise - return a new allocated buffer (use PyMem_Free() to free the buffer). */ - -Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE*) PyUnicode_AsUnicodeCopy( - PyObject *unicode - ); - /* Return an interned Unicode object for an Identifier; may fail if there is no memory.*/ PyAPI_FUNC(PyObject*) _PyUnicode_FromId(_Py_Identifier*); diff --git a/Misc/NEWS.d/next/C API/2020-06-29-15-49-36.bpo-41123.wYY4E1.rst b/Misc/NEWS.d/next/C API/2020-06-29-15-49-36.bpo-41123.wYY4E1.rst new file mode 100644 index 0000000..74ac454 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2020-06-29-15-49-36.bpo-41123.wYY4E1.rst @@ -0,0 +1 @@ +Remove ``PyUnicode_AsUnicodeCopy``. diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index c46ba4a..8eafdacf 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -15862,39 +15862,6 @@ unicode_iter(PyObject *seq) return (PyObject *)it; } -Py_UNICODE* -PyUnicode_AsUnicodeCopy(PyObject *unicode) -{ - Py_UNICODE *u, *copy; - Py_ssize_t len, size; - - if (!PyUnicode_Check(unicode)) { - PyErr_BadArgument(); - return NULL; - } -_Py_COMP_DIAG_PUSH -_Py_COMP_DIAG_IGNORE_DEPR_DECLS - u = PyUnicode_AsUnicodeAndSize(unicode, &len); -_Py_COMP_DIAG_POP - if (u == NULL) - return NULL; - /* Ensure we won't overflow the size. */ - if (len > ((PY_SSIZE_T_MAX / (Py_ssize_t)sizeof(Py_UNICODE)) - 1)) { - PyErr_NoMemory(); - return NULL; - } - size = len + 1; /* copy the null character */ - size *= sizeof(Py_UNICODE); - copy = PyMem_Malloc(size); - if (copy == NULL) { - PyErr_NoMemory(); - return NULL; - } - memcpy(copy, u, size); - return copy; -} - - static int encode_wstr_utf8(wchar_t *wstr, char **str, const char *name) { -- cgit v0.12