diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst
index 070dd17..989166f 100644
--- a/Doc/c-api/exceptions.rst
+++ b/Doc/c-api/exceptions.rst
@@ -257,14 +257,6 @@
    (:func:`os.fsdecode`).
 
 
-.. c:function:: PyObject* PyErr_SetFromErrnoWithFilenames(PyObject *type, const char *filename, const char *filename2)
-
-   Similar to :c:func:`PyErr_SetFromErrnoWithFilename`, but accepts a
-   second filename.
-
-.. versionadded:: 3.4
-
-
 .. c:function:: PyObject* PyErr_SetFromWindowsErr(int ierr)
 
    This is a convenience function to raise :exc:`WindowsError`. If called with
@@ -290,14 +282,6 @@
    encoding (:func:`os.fsdecode`).  Availability: Windows.
 
 
-.. c:function:: PyObject* PyErr_SetFromWindowsErrWithFilenames(int ierr, const char *filename, const char *filename2)
-
-   Similar to :c:func:`PyErr_SetFromWindowsErrWithFilename`, but accepts
-   a second filename.  Availability: Windows.
-
-.. versionadded:: 3.4
-
-
 .. c:function:: PyObject* PyErr_SetExcFromWindowsErrWithFilenameObject(PyObject *type, int ierr, PyObject *filename)
 
    Similar to :c:func:`PyErr_SetFromWindowsErrWithFilenameObject`, with an
@@ -320,15 +304,6 @@
    parameter specifying the exception type to be raised. Availability: Windows.
 
 
-.. c:function:: PyObject* PyErr_SetExcFromWindowsErrWithFilenames(PyObject *type, int ierr, const char *filename, const char *filename2)
-
-   Similar to :c:func:`PyErr_SetExcFromWindowsErrWithFilename`,
-   but accepts a second filename object.
-   Availability: Windows.
-
-.. versionadded:: 3.4
-
-
 .. c:function:: PyObject* PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path)
 
    This is a convenience function to raise :exc:`ImportError`. *msg* will be
diff --git a/Doc/data/refcounts.dat b/Doc/data/refcounts.dat
index 2585a48..6025617 100644
--- a/Doc/data/refcounts.dat
+++ b/Doc/data/refcounts.dat
@@ -317,12 +317,6 @@
 PyErr_SetExcFromWindowsErrWithFilename:int:ierr::
 PyErr_SetExcFromWindowsErrWithFilename:const char*:filename::
 
-PyErr_SetExcFromWindowsErrWithFilenames:PyObject*::null:
-PyErr_SetExcFromWindowsErrWithFilenames:PyObject*:type:0:
-PyErr_SetExcFromWindowsErrWithFilenames:int:ierr::
-PyErr_SetExcFromWindowsErrWithFilenames:const char*:filename::
-PyErr_SetExcFromWindowsErrWithFilenames:const char*:filename2::
-
 PyErr_SetFromErrno:PyObject*::null:
 PyErr_SetFromErrno:PyObject*:type:0:
 
@@ -330,11 +324,6 @@
 PyErr_SetFromErrnoWithFilename:PyObject*:type:0:
 PyErr_SetFromErrnoWithFilename:const char*:filename::
 
-PyErr_SetFromErrnoWithFilenames:PyObject*::null:
-PyErr_SetFromErrnoWithFilenames:PyObject*:type:0:
-PyErr_SetFromErrnoWithFilenames:const char*:filename::
-PyErr_SetFromErrnoWithFilenames:const char*:filename2::
-
 PyErr_SetFromWindowsErr:PyObject*::null:
 PyErr_SetFromWindowsErr:int:ierr::
 
@@ -342,11 +331,6 @@
 PyErr_SetFromWindowsErrWithFilename:int:ierr::
 PyErr_SetFromWindowsErrWithFilename:const char*:filename::
 
-PyErr_SetFromWindowsErrWithFilenames:PyObject*::null:
-PyErr_SetFromWindowsErrWithFilenames:int:ierr::
-PyErr_SetFromWindowsErrWithFilenames:const char*:filename::
-PyErr_SetFromWindowsErrWithFilenames:const char*:filename2::
-
 PyErr_SetInterrupt:void:::
 
 PyErr_SetNone:void:::
diff --git a/Include/pyerrors.h b/Include/pyerrors.h
index f995969..e44fb5f 100644
--- a/Include/pyerrors.h
+++ b/Include/pyerrors.h
@@ -232,17 +232,9 @@
     PyObject *exc,
     const char *filename   /* decoded from the filesystem encoding */
     );
-PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenames(
-    PyObject *exc,
-    /* decoded from the filesystem encoding */
-    const char *filename,
-    const char *filename2
-    );
 #if defined(MS_WINDOWS) && !defined(Py_LIMITED_API)
 PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilename(
     PyObject *, const Py_UNICODE *);
-PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilenames(
-    PyObject *, const Py_UNICODE *, const Py_UNICODE *);
 #endif /* MS_WINDOWS */
 
 PyAPI_FUNC(PyObject *) PyErr_Format(
@@ -256,18 +248,10 @@
     int ierr,
     const char *filename        /* decoded from the filesystem encoding */
     );
-PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilenames(
-    int ierr,
-    /* decoded from the filesystem encoding */
-    const char *filename,
-    const char *filename2
-    );
 #ifndef Py_LIMITED_API
 /* XXX redeclare to use WSTRING */
 PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilename(
     int, const Py_UNICODE *);
-PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilenames(
-    int, const Py_UNICODE *, const Py_UNICODE *);
 #endif
 PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErr(int);
 PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject(
@@ -279,18 +263,9 @@
     int ierr,
     const char *filename        /* decoded from the filesystem encoding */
     );
-PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenames(
-    PyObject *exc,
-    int ierr,
-    /* decoded from the filesystem encoding */
-    const char *filename,
-    const char *filename2
-    );
 #ifndef Py_LIMITED_API
 PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename(
     PyObject *,int, const Py_UNICODE *);
-PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilenames(
-    PyObject *,int, const Py_UNICODE *, const Py_UNICODE *);
 #endif
 PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErr(PyObject *, int);
 #endif /* MS_WINDOWS */
diff --git a/Misc/NEWS b/Misc/NEWS
index 6fb02cd..30abc7f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -246,10 +246,8 @@
 -----
 
 - Issue #20517: Added new functions allowing OSError exceptions to reference
-  two filenames instead of one: PyErr_SetFromErrnoWithFilenameObjects(),
-  PyErr_SetFromErrnoWithFilenames(), PyErr_SetFromWindowsErrWithFilenames(),
-  PyErr_SetExcFromWindowsErrWithFilenameObjects(), and
-  PyErr_SetExcFromWindowsErrWithFilenames().
+  two filenames instead of one: PyErr_SetFromErrnoWithFilenameObjects() and
+  PyErr_SetExcFromWindowsErrWithFilenameObjects().
 
 Documentation
 -------------
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
index 11dcaec..44e60dd 100644
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -726,8 +726,8 @@
  * when it was supplied.
  *
  * (If a function has two filenames, such as rename(), symlink(),
- * or copy(), PyErr_SetFromErrnoWithFilenames() is called, which
- * allows passing in a second filename.)
+ * or copy(), PyErr_SetFromErrnoWithFilenameObjects() is called,
+ * which allows passing in a second filename.)
  */
 
 /* This function doesn't cleanup on error, the caller should */
diff --git a/Python/errors.c b/Python/errors.c
index 0057e5e..996292a 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -520,17 +520,6 @@
     return result;
 }
 
-PyObject *
-PyErr_SetFromErrnoWithFilenames(PyObject *exc, const char *filename, const char *filename2)
-{
-    PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL;
-    PyObject *name2 = filename2 ? PyUnicode_DecodeFSDefault(filename2) : NULL;
-    PyObject *result = PyErr_SetFromErrnoWithFilenameObjects(exc, name, name2);
-    Py_XDECREF(name);
-    Py_XDECREF(name2);
-    return result;
-}
-
 #ifdef MS_WINDOWS
 PyObject *
 PyErr_SetFromErrnoWithUnicodeFilename(PyObject *exc, const Py_UNICODE *filename)
@@ -542,21 +531,6 @@
     Py_XDECREF(name);
     return result;
 }
-
-PyObject *
-PyErr_SetFromErrnoWithUnicodeFilenames(PyObject *exc, const Py_UNICODE *filename, const Py_UNICODE *filename2)
-{
-    PyObject *name = filename ?
-                     PyUnicode_FromUnicode(filename, wcslen(filename)) :
-             NULL;
-    PyObject *name2 = filename2 ?
-                     PyUnicode_FromUnicode(filename2, wcslen(filename2)) :
-             NULL;
-    PyObject *result = PyErr_SetFromErrnoWithFilenameObjects(exc, name, name2);
-    Py_XDECREF(name);
-    Py_XDECREF(name2);
-    return result;
-}
 #endif /* MS_WINDOWS */
 
 PyObject *
@@ -654,23 +628,6 @@
     return ret;
 }
 
-PyObject *PyErr_SetExcFromWindowsErrWithFilenames(
-    PyObject *exc,
-    int ierr,
-    const char *filename,
-    const char *filename2)
-{
-    PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL;
-    PyObject *name2 = filename2 ? PyUnicode_DecodeFSDefault(filename2) : NULL;
-    PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObjects(exc,
-                                                                 ierr,
-                                                                 name,
-                                                                 name2);
-    Py_XDECREF(name);
-    Py_XDECREF(name2);
-    return ret;
-}
-
 PyObject *PyErr_SetExcFromWindowsErrWithUnicodeFilename(
     PyObject *exc,
     int ierr,
@@ -687,51 +644,15 @@
     return ret;
 }
 
-PyObject *PyErr_SetExcFromWindowsErrWithUnicodeFilenames(
-    PyObject *exc,
-    int ierr,
-    const Py_UNICODE *filename,
-    const Py_UNICODE *filename2)
-{
-    PyObject *name = filename ?
-                     PyUnicode_FromUnicode(filename, wcslen(filename)) :
-             NULL;
-    PyObject *name2 = filename2 ?
-                     PyUnicode_FromUnicode(filename2, wcslen(filename2)) :
-             NULL;
-    PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObjects(exc,
-                                                                 ierr,
-                                                                 name,
-                                                                 name2);
-    Py_XDECREF(name);
-    Py_XDECREF(name2);
-    return ret;
-}
-
 PyObject *PyErr_SetExcFromWindowsErr(PyObject *exc, int ierr)
 {
-    return PyErr_SetExcFromWindowsErrWithFilenames(exc, ierr, NULL, NULL);
+    return PyErr_SetExcFromWindowsErrWithFilename(exc, ierr, NULL);
 }
 
 PyObject *PyErr_SetFromWindowsErr(int ierr)
 {
-    return PyErr_SetExcFromWindowsErrWithFilenames(PyExc_OSError,
-                                                  ierr, NULL, NULL);
-}
-
-PyObject *PyErr_SetFromWindowsErrWithFilenames(
-    int ierr,
-    const char *filename,
-    const char *filename2)
-{
-    PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL;
-    PyObject *name2 = filename2 ? PyUnicode_DecodeFSDefault(filename2) : NULL;
-    PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObjects(
-                                                  PyExc_OSError,
-                                                  ierr, name, name2);
-    Py_XDECREF(name);
-    Py_XDECREF(name2);
-    return result;
+    return PyErr_SetExcFromWindowsErrWithFilename(PyExc_OSError,
+                                                  ierr, NULL);
 }
 
 PyObject *PyErr_SetFromWindowsErrWithFilename(
@@ -759,25 +680,6 @@
     Py_XDECREF(name);
     return result;
 }
-
-PyObject *PyErr_SetFromWindowsErrWithUnicodeFilenames(
-    int ierr,
-    const Py_UNICODE *filename,
-    const Py_UNICODE *filename2)
-{
-    PyObject *name = filename ?
-                     PyUnicode_FromUnicode(filename, wcslen(filename)) :
-             NULL;
-    PyObject *name2 = filename2 ?
-                     PyUnicode_FromUnicode(filename2, wcslen(filename2)) :
-             NULL;
-    PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObjects(
-                                                  PyExc_OSError,
-                                                  ierr, name, name2);
-    Py_XDECREF(name);
-    Py_XDECREF(name2);
-    return result;
-}
 #endif /* MS_WINDOWS */
 
 PyObject *
