From 91b69b77cf5f78de6d35dea23098df34b6fd9e53 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Fri, 23 Apr 2021 14:23:38 +0200 Subject: [PATCH] bpo-43868: Remove PyOS_ReadlineFunctionPointer from the stable ABI list (GH-25442) The inclusion of PyOS_ReadlineFunctionPointer in python3dll.c was a mistake. According to PEP 384: > functions expecting FILE* are not part of the ABI, to avoid depending > on a specific version of the Microsoft C runtime DLL on Windows. https://bugs.python.org/issue43868 --- Doc/whatsnew/3.10.rst | 6 ++++++ Include/cpython/pythonrun.h | 1 + Include/pythonrun.h | 1 - .../next/C API/2021-04-16-18-15-56.bpo-43868.twQ7KH.rst | 3 +++ PC/python3dll.c | 1 - 5 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/C API/2021-04-16-18-15-56.bpo-43868.twQ7KH.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 1c2919a06c4..67e03f2f5ef 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1740,6 +1740,12 @@ Removed Use Python :mod:`symtable` module instead. (Contributed by Victor Stinner in :issue:`43244`.) +* Remove :c:func:`PyOS_ReadlineFunctionPointer` from the limited C API headers + and from ``python3.dll``, the library that provides the stable ABI on + Windows. Since the function takes a ``FILE*`` argument, its ABI stability + cannot be guaranteed. + (Contributed by Petr Viktorin in :issue:`43868`.) + * Remove ``ast.h``, ``asdl.h``, and ``Python-ast.h`` header files. These functions were undocumented and excluded from the limited C API. Most names defined by these header files were not prefixed by ``Py`` and so diff --git a/Include/cpython/pythonrun.h b/Include/cpython/pythonrun.h index ffca0e457d5..2e72d0820d3 100644 --- a/Include/cpython/pythonrun.h +++ b/Include/cpython/pythonrun.h @@ -118,3 +118,4 @@ PyAPI_FUNC(PyObject *) PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject /* Stuff with no proper home (yet) */ PyAPI_FUNC(char *) PyOS_Readline(FILE *, FILE *, const char *); PyAPI_DATA(PyThreadState*) _PyOS_ReadlineTState; +PyAPI_DATA(char) *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *); diff --git a/Include/pythonrun.h b/Include/pythonrun.h index b87bc738902..b0a2fc3002d 100644 --- a/Include/pythonrun.h +++ b/Include/pythonrun.h @@ -16,7 +16,6 @@ PyAPI_FUNC(void) PyErr_Display(PyObject *, PyObject *, PyObject *); /* Stuff with no proper home (yet) */ PyAPI_DATA(int) (*PyOS_InputHook)(void); -PyAPI_DATA(char) *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *); /* Stack size, in "pointers" (so we get extra safety margins on 64-bit platforms). On a 32-bit platform, this translates diff --git a/Misc/NEWS.d/next/C API/2021-04-16-18-15-56.bpo-43868.twQ7KH.rst b/Misc/NEWS.d/next/C API/2021-04-16-18-15-56.bpo-43868.twQ7KH.rst new file mode 100644 index 00000000000..50888b8b37a --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-04-16-18-15-56.bpo-43868.twQ7KH.rst @@ -0,0 +1,3 @@ +:c:func:`PyOS_ReadlineFunctionPointer` is no longer exported by limited C API +headers and by ``python3.dll`` on Windows. Like any function that takes +``FILE*``, it is not part of the stable ABI. diff --git a/PC/python3dll.c b/PC/python3dll.c index 195c6531fdf..e5a21ed7c02 100644 --- a/PC/python3dll.c +++ b/PC/python3dll.c @@ -808,7 +808,6 @@ EXPORT_DATA(PyODictIter_Type) EXPORT_DATA(PyODictKeys_Type) EXPORT_DATA(PyODictValues_Type) EXPORT_DATA(PyOS_InputHook) -EXPORT_DATA(PyOS_ReadlineFunctionPointer) EXPORT_DATA(PyProperty_Type) EXPORT_DATA(PyRange_Type) EXPORT_DATA(PyRangeIter_Type)