Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit aac29af

Browse files
authoredOct 13, 2021
bpo-45434: pyport.h no longer includes <stdlib.h> (pythonGH-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]*/

‎Modules/faulthandler.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
#include "pycore_pyerrors.h" // _Py_DumpExtensionModules
44
#include "pycore_pystate.h" // _PyThreadState_GET()
55
#include "pycore_traceback.h" // _Py_DumpTracebackThreads
6-
#include <signal.h>
6+
7+
#include "frameobject.h"
8+
79
#include <object.h>
8-
#include <frameobject.h>
910
#include <signal.h>
11+
#include <signal.h>
12+
#include <stdlib.h> // abort()
1013
#if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK)
1114
# include <pthread.h>
1215
#endif

‎Modules/getpath.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
#include "pycore_pathconfig.h"
77
#include "osdefs.h" // DELIM
88

9-
#include <sys/types.h>
9+
#include <stdlib.h> // getenv()
1010
#include <string.h>
11+
#include <sys/types.h>
1112

1213
#ifdef __APPLE__
1314
# include <mach-o/dyld.h>

‎Modules/nismodule.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "Python.h"
1414

15+
#include <stdlib.h> // free()
1516
#include <sys/time.h>
1617
#include <sys/types.h>
1718
#include <rpc/rpc.h>

‎Modules/ossaudiodev.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "Python.h"
2222
#include "structmember.h" // PyMemberDef
2323

24+
#include <stdlib.h> // getenv()
2425
#ifdef HAVE_FCNTL_H
2526
#include <fcntl.h>
2627
#else

‎Modules/posixmodule.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646
# undef HAVE_FACCESSAT
4747
#endif
4848

49-
#include <stdio.h> /* needed for ctermid() */
49+
#include <stdio.h> // ctermid()
50+
#include <stdlib.h> // system()
5051

5152
/*
5253
* A number of APIs are available on macOS from a certain macOS version.

‎Modules/readline.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66

77
/* Standard definitions */
88
#include "Python.h"
9-
#include <stddef.h>
10-
#include <signal.h>
9+
1110
#include <errno.h>
11+
#include <signal.h>
12+
#include <stddef.h>
13+
#include <stdlib.h> // free()
1214
#include <sys/time.h>
1315

1416
#if defined(HAVE_SETLOCALE)

‎Objects/floatobject.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
#include <ctype.h>
1515
#include <float.h>
16+
#include <stdlib.h> // strtol()
1617

1718
/*[clinic input]
1819
class float "PyObject *" "&PyFloat_Type"

‎Objects/longobject.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010
#include "pycore_pystate.h" // _Py_IsMainInterpreter()
1111
#include "longintrepr.h"
1212

13-
#include <float.h>
1413
#include <ctype.h>
14+
#include <float.h>
1515
#include <stddef.h>
16+
#include <stdlib.h> // abs()
1617

1718
#include "clinic/longobject.c.h"
1819
/*[clinic input]

‎Objects/obmalloc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "pycore_pymem.h" // _PyTraceMalloc_Config
33

44
#include <stdbool.h>
5+
#include <stdlib.h> // malloc()
56

67

78
/* Defined in tracemalloc.c */

‎PC/WinMain.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#define WIN32_LEAN_AND_MEAN
66
#include <windows.h>
7+
#include <stdlib.h> /* __argc, __wargv */
78

89
int WINAPI wWinMain(
910
HINSTANCE hInstance, /* handle to current instance */

‎Programs/_freeze_module.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <pycore_import.h>
1313

1414
#include <stdio.h>
15+
#include <stdlib.h> // malloc()
1516
#include <sys/types.h>
1617
#include <sys/stat.h>
1718
#ifndef MS_WINDOWS

‎Programs/_testembed.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <Python.h>
1212
#include <inttypes.h>
1313
#include <stdio.h>
14+
#include <stdlib.h> // putenv()
1415
#include <wchar.h>
1516

1617
/*********************************************************

‎Python/dtoa.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@
119119

120120
#include "Python.h"
121121
#include "pycore_dtoa.h"
122+
#include <stdlib.h> // exit()
122123

123124
/* if PY_NO_SHORT_FLOAT_REPR is defined, then don't even try to compile
124125
the following code */

‎Python/errors.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@ extern char *strerror(int);
1515
#endif
1616
#endif
1717

18+
#include <ctype.h>
1819
#ifdef MS_WINDOWS
19-
#include <windows.h>
20-
#include <winbase.h>
20+
# include <windows.h>
21+
# include <winbase.h>
22+
# include <stdlib.h> // _sys_nerr
2123
#endif
2224

23-
#include <ctype.h>
2425

2526
#ifdef __cplusplus
2627
extern "C" {

‎Python/fileutils.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "pycore_runtime.h" // _PyRuntime
44
#include "osdefs.h" // SEP
55
#include <locale.h>
6+
#include <stdlib.h> // mbstowcs()
67

78
#ifdef MS_WINDOWS
89
# include <malloc.h>

‎Python/initconfig.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
#include "pycore_pystate.h" // _PyThreadState_GET()
1111

1212
#include "osdefs.h" // DELIM
13+
1314
#include <locale.h> // setlocale()
15+
#include <stdlib.h> // getenv()
1416
#if defined(MS_WINDOWS) || defined(__CYGWIN__)
1517
# ifdef HAVE_IO_H
1618
# include <io.h>

‎Python/preconfig.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
#include "pycore_initconfig.h" // _PyArgv
55
#include "pycore_pymem.h" // _PyMem_GetAllocatorName()
66
#include "pycore_runtime.h" // _PyRuntime_Initialize()
7+
78
#include <locale.h> // setlocale()
9+
#include <stdlib.h> // getenv()
810

911

1012
/* Forward declarations */

‎Python/pylifecycle.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "pycore_traceback.h" // _Py_DumpTracebackThreads()
1717

1818
#include <locale.h> // setlocale()
19+
#include <stdlib.h> // getenv()
1920

2021
#if defined(__APPLE__)
2122
#include <mach-o/loader.h>

‎Python/pystrhex.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/* Format bytes as hexadecimal */
22

33
#include "Python.h"
4-
#include "pycore_strhex.h" // _Py_strhex_with_sep()
5-
4+
#include "pycore_strhex.h" // _Py_strhex_with_sep()
5+
#include <stdlib.h> // abs()
66

77
static PyObject *_Py_strhex_impl(const char* argbuf, const Py_ssize_t arglen,
88
const PyObject* sep, int bytes_per_sep_group,

0 commit comments

Comments
 (0)