Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 4 additions & 12 deletions Doc/whatsnew/3.11.rst
Original file line number Diff line number Diff line change
Expand Up @@ -564,18 +564,10 @@ Porting to Python 3.11

(Contributed by Victor Stinner in :issue:`39573`.)

* The ``<Python.h>`` header file no longer includes ``<stdlib.h>``. C
extensions using ``<stdlib.h>`` must now include it explicitly.
The system ``<stdlib.h>`` header provides functions like:
``malloc()``/``free()``, ``getenv()``, ``strtol()``, ``abs()``, ``strtol()``,
``exit()`` and ``abort()``.
(Contributed by Victor Stinner in :issue:`45434`.)

* The ``<Python.h>`` header file no longer includes ``<stdio.h>`` if the
``Py_LIMITED_API`` macro is defined. Functions expecting ``FILE*`` are
excluded from the limited C API (:pep:`384`). C extensions using
``<stdio.h>`` must now include it explicitly. The system ``<stdio.h>``
header provides functions like ``printf()`` and ``fopen()``.
* ``<Python.h>`` no longer includes the header files ``<stdlib.h>``,
``<stdio.h>``, ``<errno.h>`` and ``<string.h>`` when the ``Py_LIMITED_API``
macro is set to ``0x030b0000`` (Python 3.11) or higher. C extensions should
explicitly include the header files after ``#include <Python.h>``.
(Contributed by Victor Stinner in :issue:`45434`.)

* The non-limited API files ``cellobject.h``, ``classobject.h``, ``context.h``,
Expand Down
10 changes: 6 additions & 4 deletions Include/Python.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,14 @@
# define _SGI_MP_SOURCE
#endif

#include <string.h> // memcpy()
#ifndef Py_LIMITED_API
// stdlib.h, stdio.h, errno.h and string.h headers are not used by Python
// headers, but kept for backward compatibility. They are excluded from the
// limited C API of Python 3.11.
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
# include <stdlib.h>
# include <stdio.h> // FILE*
#endif
#ifdef HAVE_ERRNO_H
# include <errno.h> // errno
# include <string.h> // memcpy()
#endif
#ifndef MS_WINDOWS
# include <unistd.h>
Expand Down
7 changes: 4 additions & 3 deletions Include/pyport.h
Original file line number Diff line number Diff line change
Expand Up @@ -201,9 +201,10 @@ typedef Py_ssize_t Py_ssize_clean_t;
# define Py_LOCAL_INLINE(type) static inline type
#endif

/* Py_MEMCPY is kept for backwards compatibility,
* see https://bugs.python.org/issue28126 */
#define Py_MEMCPY memcpy
// bpo-28126: Py_MEMCPY is kept for backwards compatibility,
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
# define Py_MEMCPY memcpy
#endif

#ifdef HAVE_IEEEFP_H
#include <ieeefp.h> /* needed for 'finite' declaration on some platforms */
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
The ``<Python.h>`` header file no longer includes ``<stdlib.h>``. C
extensions using ``<stdlib.h>`` must now include it explicitly.
The system ``<stdlib.h>`` header provides functions like:
``malloc()``/``free()``, ``getenv()``, ``strtol()``, ``abs()``, ``strtol()``,
``exit()`` and ``abort()``.
``<Python.h>`` no longer includes the header files ``<stdlib.h>``,
``<stdio.h>``, ``<errno.h>`` and ``<string.h>`` when the ``Py_LIMITED_API``
macro is set to ``0x030b0000`` (Python 3.11) or higher. C extensions should
explicitly include the header files after ``#include <Python.h>``.
Patch by Victor Stinner.

This file was deleted.

3 changes: 1 addition & 2 deletions Modules/xxlimited.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

/* Use this file as a template to start implementing a module that
also declares object types. All occurrences of 'Xxo' should be changed
to something reasonable for your objects. After that, all other
Expand Down Expand Up @@ -55,7 +54,7 @@
pass
*/

#define Py_LIMITED_API 0x030a0000
#define Py_LIMITED_API 0x030b0000

#include "Python.h"

Expand Down