Skip to content

Commit aac29af

Browse files
authored
bpo-45434: pyport.h no longer includes <stdlib.h> (GH-28914)
Include <stdlib.h> explicitly in C files. Python.h includes <wchar.h>.
1 parent db2b6a2 commit aac29af

29 files changed

+60
-20
lines changed

Doc/whatsnew/3.11.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,9 @@ Porting to Python 3.11
556556

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

561564
Deprecated

Include/Python.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@
3333
# include <stddef.h>
3434
#endif
3535

36-
#include <assert.h>
36+
#include <assert.h> // assert()
37+
#include <wchar.h> // wchar_t
3738

3839
#include "pyport.h"
3940
#include "pymacro.h"

Include/internal/pycore_fileutils.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ extern int _Py_add_relfile(wchar_t *dirname,
8888
// ...
8989
// _Py_END_SUPPRESS_IPH
9090
#if defined _MSC_VER && _MSC_VER >= 1900
91+
92+
# include <stdlib.h> // _set_thread_local_invalid_parameter_handler()
93+
9194
extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler;
9295
# define _Py_BEGIN_SUPPRESS_IPH \
9396
{ _invalid_parameter_handler _Py_old_handler = \

Include/pyport.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,6 @@ typedef Py_ssize_t Py_ssize_clean_t;
205205
* see https://bugs.python.org/issue28126 */
206206
#define Py_MEMCPY memcpy
207207

208-
#include <stdlib.h>
209-
210208
#ifdef HAVE_IEEEFP_H
211209
#include <ieeefp.h> /* needed for 'finite' declaration on some platforms */
212210
#endif
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
The ``<Python.h>`` header file no longer includes ``<stdlib.h>``. C
2-
extensions using ``<stdlib.h>`` must now include it explicitly. Patch by
3-
Victor Stinner.
2+
extensions using ``<stdlib.h>`` must now include it explicitly.
3+
The system ``<stdlib.h>`` header provides functions like:
4+
``malloc()``/``free()``, ``getenv()``, ``strtol()``, ``abs()``, ``strtol()``,
5+
``exit()`` and ``abort()``.
6+
Patch by Victor Stinner.

Modules/_ctypes/_ctypes_test.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include <windows.h>
55
#endif
66

7+
#include <stdlib.h> // qsort()
8+
79
#define EXPORT(x) Py_EXPORTED_SYMBOL x
810

911
/* some functions handy for testing */

Modules/_gdbmmodule.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55

66
#define PY_SSIZE_T_CLEAN
77
#include "Python.h"
8+
#include "gdbm.h"
89

9-
#include <sys/types.h>
10-
#include <sys/stat.h>
1110
#include <fcntl.h>
12-
#include "gdbm.h"
11+
#include <stdlib.h> // free()
12+
#include <sys/stat.h>
13+
#include <sys/types.h>
1314

1415
#if defined(WIN32) && !defined(__CYGWIN__)
1516
#include "gdbmerrno.h"

Modules/_lzmamodule.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "Python.h"
1111
#include "structmember.h" // PyMemberDef
1212

13+
#include <stdlib.h> // free()
1314
#include <string.h>
1415

1516
#include <lzma.h>

Modules/_pickle.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
#include "pycore_moduleobject.h" // _PyModule_GetState()
1313
#include "structmember.h" // PyMemberDef
1414

15+
#include <stdlib.h> // strtol()
16+
1517
PyDoc_STRVAR(pickle_module_doc,
1618
"Optimized C implementation for the Python pickle module.");
1719

Modules/_tracemalloc.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
#include "pycore_hashtable.h"
66
#include <pycore_frame.h>
77

8+
#include <stdlib.h> // malloc()
9+
810
#include "clinic/_tracemalloc.c.h"
11+
912
/*[clinic input]
1013
module _tracemalloc
1114
[clinic start generated code]*/

0 commit comments

Comments
 (0)