mirror of https://github.com/python/cpython
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:
parent
db2b6a20cd
commit
aac29af678
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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 = \
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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.");
|
||||||
|
|
||||||
|
|
|
@ -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]*/
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
/*********************************************************
|
/*********************************************************
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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" {
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/* Format bytes as hexadecimal */
|
/* Format bytes as hexadecimal */
|
||||||
|
|
||||||
#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,
|
||||||
|
|
Loading…
Reference in New Issue