bpo-45434: pyport.h no longer includes <stdlib.h> (GH-28914)

Include <stdlib.h> explicitly in C files.

Python.h includes <wchar.h>.
This commit is contained in:
Victor Stinner 2021-10-13 19:25:53 +02:00 committed by GitHub
parent db2b6a20cd
commit aac29af678
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 61 additions and 21 deletions

View File

@ -556,6 +556,9 @@ Porting to Python 3.11
* The ``<Python.h>`` header file no longer includes ``<stdlib.h>``. C * The ``<Python.h>`` header file no longer includes ``<stdlib.h>``. C
extensions using ``<stdlib.h>`` must now include it explicitly. 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`.) (Contributed by Victor Stinner in :issue:`45434`.)
Deprecated Deprecated

View File

@ -33,7 +33,8 @@
# include <stddef.h> # include <stddef.h>
#endif #endif
#include <assert.h> #include <assert.h> // assert()
#include <wchar.h> // wchar_t
#include "pyport.h" #include "pyport.h"
#include "pymacro.h" #include "pymacro.h"

View File

@ -88,6 +88,9 @@ extern int _Py_add_relfile(wchar_t *dirname,
// ... // ...
// _Py_END_SUPPRESS_IPH // _Py_END_SUPPRESS_IPH
#if defined _MSC_VER && _MSC_VER >= 1900 #if defined _MSC_VER && _MSC_VER >= 1900
# include <stdlib.h> // _set_thread_local_invalid_parameter_handler()
extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler; extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler;
# define _Py_BEGIN_SUPPRESS_IPH \ # define _Py_BEGIN_SUPPRESS_IPH \
{ _invalid_parameter_handler _Py_old_handler = \ { _invalid_parameter_handler _Py_old_handler = \

View File

@ -205,8 +205,6 @@ typedef Py_ssize_t Py_ssize_clean_t;
* see https://bugs.python.org/issue28126 */ * see https://bugs.python.org/issue28126 */
#define Py_MEMCPY memcpy #define Py_MEMCPY memcpy
#include <stdlib.h>
#ifdef HAVE_IEEEFP_H #ifdef HAVE_IEEEFP_H
#include <ieeefp.h> /* needed for 'finite' declaration on some platforms */ #include <ieeefp.h> /* needed for 'finite' declaration on some platforms */
#endif #endif

View File

@ -1,3 +1,6 @@
The ``<Python.h>`` header file no longer includes ``<stdlib.h>``. C The ``<Python.h>`` header file no longer includes ``<stdlib.h>``. C
extensions using ``<stdlib.h>`` must now include it explicitly. Patch by extensions using ``<stdlib.h>`` must now include it explicitly.
Victor Stinner. The system ``<stdlib.h>`` header provides functions like:
``malloc()``/``free()``, ``getenv()``, ``strtol()``, ``abs()``, ``strtol()``,
``exit()`` and ``abort()``.
Patch by Victor Stinner.

View File

@ -4,6 +4,8 @@
#include <windows.h> #include <windows.h>
#endif #endif
#include <stdlib.h> // qsort()
#define EXPORT(x) Py_EXPORTED_SYMBOL x #define EXPORT(x) Py_EXPORTED_SYMBOL x
/* some functions handy for testing */ /* some functions handy for testing */

View File

@ -5,12 +5,13 @@
#define PY_SSIZE_T_CLEAN #define PY_SSIZE_T_CLEAN
#include "Python.h" #include "Python.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "gdbm.h" #include "gdbm.h"
#include <fcntl.h>
#include <stdlib.h> // free()
#include <sys/stat.h>
#include <sys/types.h>
#if defined(WIN32) && !defined(__CYGWIN__) #if defined(WIN32) && !defined(__CYGWIN__)
#include "gdbmerrno.h" #include "gdbmerrno.h"
extern const char * gdbm_strerror(gdbm_error); extern const char * gdbm_strerror(gdbm_error);

View File

@ -10,6 +10,7 @@
#include "Python.h" #include "Python.h"
#include "structmember.h" // PyMemberDef #include "structmember.h" // PyMemberDef
#include <stdlib.h> // free()
#include <string.h> #include <string.h>
#include <lzma.h> #include <lzma.h>

View File

@ -12,6 +12,8 @@
#include "pycore_moduleobject.h" // _PyModule_GetState() #include "pycore_moduleobject.h" // _PyModule_GetState()
#include "structmember.h" // PyMemberDef #include "structmember.h" // PyMemberDef
#include <stdlib.h> // strtol()
PyDoc_STRVAR(pickle_module_doc, PyDoc_STRVAR(pickle_module_doc,
"Optimized C implementation for the Python pickle module."); "Optimized C implementation for the Python pickle module.");

View File

@ -5,7 +5,10 @@
#include "pycore_hashtable.h" #include "pycore_hashtable.h"
#include <pycore_frame.h> #include <pycore_frame.h>
#include <stdlib.h> // malloc()
#include "clinic/_tracemalloc.c.h" #include "clinic/_tracemalloc.c.h"
/*[clinic input] /*[clinic input]
module _tracemalloc module _tracemalloc
[clinic start generated code]*/ [clinic start generated code]*/

View File

@ -3,10 +3,13 @@
#include "pycore_pyerrors.h" // _Py_DumpExtensionModules #include "pycore_pyerrors.h" // _Py_DumpExtensionModules
#include "pycore_pystate.h" // _PyThreadState_GET() #include "pycore_pystate.h" // _PyThreadState_GET()
#include "pycore_traceback.h" // _Py_DumpTracebackThreads #include "pycore_traceback.h" // _Py_DumpTracebackThreads
#include <signal.h>
#include "frameobject.h"
#include <object.h> #include <object.h>
#include <frameobject.h>
#include <signal.h> #include <signal.h>
#include <signal.h>
#include <stdlib.h> // abort()
#if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK) #if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK)
# include <pthread.h> # include <pthread.h>
#endif #endif

View File

@ -6,8 +6,9 @@
#include "pycore_pathconfig.h" #include "pycore_pathconfig.h"
#include "osdefs.h" // DELIM #include "osdefs.h" // DELIM
#include <sys/types.h> #include <stdlib.h> // getenv()
#include <string.h> #include <string.h>
#include <sys/types.h>
#ifdef __APPLE__ #ifdef __APPLE__
# include <mach-o/dyld.h> # include <mach-o/dyld.h>

View File

@ -12,6 +12,7 @@
#include "Python.h" #include "Python.h"
#include <stdlib.h> // free()
#include <sys/time.h> #include <sys/time.h>
#include <sys/types.h> #include <sys/types.h>
#include <rpc/rpc.h> #include <rpc/rpc.h>

View File

@ -21,6 +21,7 @@
#include "Python.h" #include "Python.h"
#include "structmember.h" // PyMemberDef #include "structmember.h" // PyMemberDef
#include <stdlib.h> // getenv()
#ifdef HAVE_FCNTL_H #ifdef HAVE_FCNTL_H
#include <fcntl.h> #include <fcntl.h>
#else #else

View File

@ -46,7 +46,8 @@
# undef HAVE_FACCESSAT # undef HAVE_FACCESSAT
#endif #endif
#include <stdio.h> /* needed for ctermid() */ #include <stdio.h> // ctermid()
#include <stdlib.h> // system()
/* /*
* A number of APIs are available on macOS from a certain macOS version. * A number of APIs are available on macOS from a certain macOS version.

View File

@ -6,9 +6,11 @@
/* Standard definitions */ /* Standard definitions */
#include "Python.h" #include "Python.h"
#include <stddef.h>
#include <signal.h>
#include <errno.h> #include <errno.h>
#include <signal.h>
#include <stddef.h>
#include <stdlib.h> // free()
#include <sys/time.h> #include <sys/time.h>
#if defined(HAVE_SETLOCALE) #if defined(HAVE_SETLOCALE)

View File

@ -13,6 +13,7 @@
#include <ctype.h> #include <ctype.h>
#include <float.h> #include <float.h>
#include <stdlib.h> // strtol()
/*[clinic input] /*[clinic input]
class float "PyObject *" "&PyFloat_Type" class float "PyObject *" "&PyFloat_Type"

View File

@ -10,9 +10,10 @@
#include "pycore_pystate.h" // _Py_IsMainInterpreter() #include "pycore_pystate.h" // _Py_IsMainInterpreter()
#include "longintrepr.h" #include "longintrepr.h"
#include <float.h>
#include <ctype.h> #include <ctype.h>
#include <float.h>
#include <stddef.h> #include <stddef.h>
#include <stdlib.h> // abs()
#include "clinic/longobject.c.h" #include "clinic/longobject.c.h"
/*[clinic input] /*[clinic input]

View File

@ -2,6 +2,7 @@
#include "pycore_pymem.h" // _PyTraceMalloc_Config #include "pycore_pymem.h" // _PyTraceMalloc_Config
#include <stdbool.h> #include <stdbool.h>
#include <stdlib.h> // malloc()
/* Defined in tracemalloc.c */ /* Defined in tracemalloc.c */

View File

@ -4,6 +4,7 @@
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <stdlib.h> /* __argc, __wargv */
int WINAPI wWinMain( int WINAPI wWinMain(
HINSTANCE hInstance, /* handle to current instance */ HINSTANCE hInstance, /* handle to current instance */

View File

@ -12,6 +12,7 @@
#include <pycore_import.h> #include <pycore_import.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> // malloc()
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#ifndef MS_WINDOWS #ifndef MS_WINDOWS

View File

@ -11,6 +11,7 @@
#include <Python.h> #include <Python.h>
#include <inttypes.h> #include <inttypes.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> // putenv()
#include <wchar.h> #include <wchar.h>
/********************************************************* /*********************************************************

View File

@ -119,6 +119,7 @@
#include "Python.h" #include "Python.h"
#include "pycore_dtoa.h" #include "pycore_dtoa.h"
#include <stdlib.h> // exit()
/* if PY_NO_SHORT_FLOAT_REPR is defined, then don't even try to compile /* if PY_NO_SHORT_FLOAT_REPR is defined, then don't even try to compile
the following code */ the following code */

View File

@ -15,12 +15,13 @@ extern char *strerror(int);
#endif #endif
#endif #endif
#include <ctype.h>
#ifdef MS_WINDOWS #ifdef MS_WINDOWS
#include <windows.h> # include <windows.h>
#include <winbase.h> # include <winbase.h>
# include <stdlib.h> // _sys_nerr
#endif #endif
#include <ctype.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {

View File

@ -3,6 +3,7 @@
#include "pycore_runtime.h" // _PyRuntime #include "pycore_runtime.h" // _PyRuntime
#include "osdefs.h" // SEP #include "osdefs.h" // SEP
#include <locale.h> #include <locale.h>
#include <stdlib.h> // mbstowcs()
#ifdef MS_WINDOWS #ifdef MS_WINDOWS
# include <malloc.h> # include <malloc.h>

View File

@ -10,7 +10,9 @@
#include "pycore_pystate.h" // _PyThreadState_GET() #include "pycore_pystate.h" // _PyThreadState_GET()
#include "osdefs.h" // DELIM #include "osdefs.h" // DELIM
#include <locale.h> // setlocale() #include <locale.h> // setlocale()
#include <stdlib.h> // getenv()
#if defined(MS_WINDOWS) || defined(__CYGWIN__) #if defined(MS_WINDOWS) || defined(__CYGWIN__)
# ifdef HAVE_IO_H # ifdef HAVE_IO_H
# include <io.h> # include <io.h>

View File

@ -4,7 +4,9 @@
#include "pycore_initconfig.h" // _PyArgv #include "pycore_initconfig.h" // _PyArgv
#include "pycore_pymem.h" // _PyMem_GetAllocatorName() #include "pycore_pymem.h" // _PyMem_GetAllocatorName()
#include "pycore_runtime.h" // _PyRuntime_Initialize() #include "pycore_runtime.h" // _PyRuntime_Initialize()
#include <locale.h> // setlocale() #include <locale.h> // setlocale()
#include <stdlib.h> // getenv()
/* Forward declarations */ /* Forward declarations */

View File

@ -16,6 +16,7 @@
#include "pycore_traceback.h" // _Py_DumpTracebackThreads() #include "pycore_traceback.h" // _Py_DumpTracebackThreads()
#include <locale.h> // setlocale() #include <locale.h> // setlocale()
#include <stdlib.h> // getenv()
#if defined(__APPLE__) #if defined(__APPLE__)
#include <mach-o/loader.h> #include <mach-o/loader.h>

View File

@ -2,7 +2,7 @@
#include "Python.h" #include "Python.h"
#include "pycore_strhex.h" // _Py_strhex_with_sep() #include "pycore_strhex.h" // _Py_strhex_with_sep()
#include <stdlib.h> // abs()
static PyObject *_Py_strhex_impl(const char* argbuf, const Py_ssize_t arglen, static PyObject *_Py_strhex_impl(const char* argbuf, const Py_ssize_t arglen,
const PyObject* sep, int bytes_per_sep_group, const PyObject* sep, int bytes_per_sep_group,