bpo-45434: Limited Python.h no longer includes stdio.h (GH-28960)

The <Python.h> header file no longer includes <stdio.h> if the
Py_LIMITED_API macro is defined.
This commit is contained in:
Victor Stinner 2021-10-15 01:09:06 +02:00 committed by GitHub
parent af1083e975
commit 284994762d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 7 deletions

View File

@ -565,6 +565,13 @@ Porting to Python 3.11
``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()``.
(Contributed by Victor Stinner in :issue:`45434`.)
Deprecated
----------

View File

@ -16,12 +16,10 @@
# define _SGI_MP_SOURCE
#endif
#include <stdio.h> // NULL, FILE*
#ifndef NULL
# error "Python.h requires that stdio.h define NULL."
#endif
#include <string.h> // memcpy()
#ifndef Py_LIMITED_API
# include <stdio.h> // FILE*
#endif
#ifdef HAVE_ERRNO_H
# include <errno.h> // errno
#endif
@ -29,8 +27,7 @@
# include <unistd.h>
#endif
#ifdef HAVE_STDDEF_H
// For size_t
# include <stddef.h>
# include <stddef.h> // size_t
#endif
#include <assert.h> // assert()

View File

@ -0,0 +1,5 @@
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.
Patch by Victor Stinner.