Make PyUnicode_Copy() private => _PyUnicode_Copy()

Undocument the function.

Make also decode_utf8_errors() as private (static).
diff --git a/Doc/c-api/unicode.rst b/Doc/c-api/unicode.rst
index 65d4af5..81ed540 100644
--- a/Doc/c-api/unicode.rst
+++ b/Doc/c-api/unicode.rst
@@ -386,13 +386,6 @@
    .. versionadded:: 3.3
 
 
-.. c:function:: PyObject* PyUnicode_Copy(PyObject *unicode)
-
-   Get a new copy of a Unicode object.
-
-   .. versionadded:: 3.3
-
-
 .. c:function:: PyObject* PyUnicode_FromKindAndData(int kind, const void *buffer, \
                                                     Py_ssize_t size)
 
diff --git a/Doc/whatsnew/3.3.rst b/Doc/whatsnew/3.3.rst
index 56a16da..ae275fc 100644
--- a/Doc/whatsnew/3.3.rst
+++ b/Doc/whatsnew/3.3.rst
@@ -769,8 +769,8 @@
  * :c:macro:`PyUnicode_GET_DATA_SIZE`: use
    ``PyUnicode_GET_LENGTH(str) * PyUnicode_KIND(str)`` (only work on ready
    strings)
- * :c:func:`PyUnicode_AsUnicodeCopy`: use :c:func:`PyUnicode_AsUCS4Copy`,
-   :c:func:`PyUnicode_AsWideCharString` or :c:func:`PyUnicode_Copy`
+ * :c:func:`PyUnicode_AsUnicodeCopy`: use :c:func:`PyUnicode_AsUCS4Copy` or
+   :c:func:`PyUnicode_AsWideCharString`
 
 Functions and macros manipulating Py_UNICODE* strings:
 
diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h
index be45b02..235c677 100644
--- a/Include/unicodeobject.h
+++ b/Include/unicodeobject.h
@@ -616,9 +616,11 @@
 #endif
 
 /* Get a copy of a Unicode string. */
-PyAPI_FUNC(PyObject*) PyUnicode_Copy(
+#ifndef Py_LIMITED_API
+PyAPI_FUNC(PyObject*) _PyUnicode_Copy(
     PyObject *unicode
     );
+#endif
 
 /* Copy character from one unicode object into another, this function performs
    character conversion when necessary and falls back to memcpy if possible.
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index c5057bd..550e284 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -249,7 +249,7 @@
             return NULL;
         }
         else {
-            item = PyUnicode_Copy(item);
+            item = _PyUnicode_Copy(item);
             if (item == NULL) {
                 Py_DECREF(newtuple);
                 return NULL;
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index ddb7baa..5c2d2a7 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -497,7 +497,7 @@
     }
     else
         /* Subtype -- return genuine unicode string with the same value. */
-        return PyUnicode_Copy(unicode);
+        return _PyUnicode_Copy(unicode);
 }
 
 #ifdef HAVE_MBCS
@@ -1961,7 +1961,7 @@
 }
 
 PyObject*
-PyUnicode_Copy(PyObject *unicode)
+_PyUnicode_Copy(PyObject *unicode)
 {
     Py_ssize_t length;
     PyObject *copy;
@@ -2832,7 +2832,7 @@
     if (PyUnicode_Check(obj)) {
         /* For a Unicode subtype that's not a Unicode object,
            return a true Unicode object with the same data. */
-        return PyUnicode_Copy(obj);
+        return _PyUnicode_Copy(obj);
     }
     PyErr_Format(PyExc_TypeError,
                  "Can't convert '%.100s' object to str implicitly",
@@ -4333,7 +4333,7 @@
             goto onError;                                           \
     } while (0)
 
-PyObject *
+static PyObject *
 decode_utf8_errors(const char *starts,
                    Py_ssize_t size,
                    const char *errors,
@@ -9231,7 +9231,7 @@
     Py_UCS4 maxchar_old, maxchar_new = 0;
     PyObject *v;
 
-    u = PyUnicode_Copy(self);
+    u = _PyUnicode_Copy(self);
     if (u == NULL)
         return NULL;
     maxchar_old = PyUnicode_MAX_CHAR_VALUE(u);
@@ -12753,7 +12753,7 @@
 static PyObject *
 unicode_getnewargs(PyObject *v)
 {
-    PyObject *copy = PyUnicode_Copy(v);
+    PyObject *copy = _PyUnicode_Copy(v);
     if (!copy)
         return NULL;
     return Py_BuildValue("(N)", copy);