gh-110014: Include explicitly <unistd.h> header (#110155)

* Remove unused <locale.h> includes.
* Remove unused <fcntl.h> include in traceback.h.
* Remove redundant <assert.h> and <stddef.h> includes. They  are already
  included by "Python.h".
* Remove <object.h> include in faulthandler.c. Python.h already includes it.
* Add missing <stdbool.h> in pycore_pythread.h if HAVE_PTHREAD_STUBS
  is defined.
* Fix also warnings in pthread_stubs.h: don't redefine macros if they
  are already defined, like the __NEED_pthread_t macro.
This commit is contained in:
Victor Stinner 2023-09-30 22:06:45 +02:00 committed by GitHub
parent 0def8c712b
commit 7513994c92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 120 additions and 59 deletions

View File

@ -988,7 +988,8 @@ Porting to Python 3.13
* ``Python.h`` no longer includes the ``<unistd.h>`` standard header file. If
needed, it should now be included explicitly. For example, it provides the
functions: ``close()``, ``getpagesize()``, ``getpid()`` and ``sysconf()``.
functions: ``read()``, ``write()``, ``close()``, ``isatty()``, ``lseek()``,
``getpid()``, ``getcwd()``, ``sysconf()`` and ``getpagesize()``.
As a consequence, ``_POSIX_SEMAPHORES`` and ``_POSIX_THREADS`` macros are no
longer defined by ``Python.h``. The ``HAVE_UNISTD_H`` and ``HAVE_PTHREAD_H``
macros defined by ``Python.h`` can be used to decide if ``<unistd.h>`` and

View File

@ -21,13 +21,29 @@
#ifdef __wasi__
// WASI's bits/alltypes.h provides type definitions when __NEED_ is set.
// The header file can be included multiple times.
//
// <sys/types.h> may also define these macros.
# ifndef __NEED_pthread_cond_t
# define __NEED_pthread_cond_t 1
# endif
# ifndef __NEED_pthread_condattr_t
# define __NEED_pthread_condattr_t 1
# endif
# ifndef __NEED_pthread_mutex_t
# define __NEED_pthread_mutex_t 1
# endif
# ifndef __NEED_pthread_mutexattr_t
# define __NEED_pthread_mutexattr_t 1
# endif
# ifndef __NEED_pthread_key_t
# define __NEED_pthread_key_t 1
# endif
# ifndef __NEED_pthread_t
# define __NEED_pthread_t 1
# endif
# ifndef __NEED_pthread_attr_t
# define __NEED_pthread_attr_t 1
# endif
# include <bits/alltypes.h>
#else
typedef struct { void *__x; } pthread_cond_t;

View File

@ -8,7 +8,6 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
// Get _POSIX_THREADS and _POSIX_SEMAPHORES macros if available
#if (defined(HAVE_UNISTD_H) && !defined(_POSIX_THREADS) \
&& !defined(_POSIX_SEMAPHORES))
@ -44,6 +43,8 @@ extern "C" {
#if defined(HAVE_PTHREAD_STUBS)
#include <stdbool.h> // bool
// pthread_key
struct py_stub_tls_entry {
bool in_use;

View File

@ -5,20 +5,23 @@
#include "pycore_object.h" // _PyObject_GC_UNTRACK()
#include "pycore_pyerrors.h" // _PyErr_ChainExceptions1()
#include <stdbool.h>
#include <stdbool.h> // bool
#ifdef HAVE_UNISTD_H
# include <unistd.h> // lseek()
#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
# include <sys/types.h>
#endif
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
# include <sys/stat.h>
#endif
#ifdef HAVE_IO_H
#include <io.h>
# include <io.h>
#endif
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
# include <fcntl.h> // open()
#endif
#include <stddef.h> /* For offsetof */
#include "_iomodule.h"
/*
@ -35,22 +38,23 @@
*/
#ifdef MS_WINDOWS
/* can simulate truncate with Win32 API functions; see file_truncate */
#define HAVE_FTRUNCATE
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
// can simulate truncate with Win32 API functions; see file_truncate
# define HAVE_FTRUNCATE
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
#endif
#if BUFSIZ < (8*1024)
#define SMALLCHUNK (8*1024)
# define SMALLCHUNK (8*1024)
#elif (BUFSIZ >= (2 << 25))
#error "unreasonable BUFSIZ > 64 MiB defined"
# error "unreasonable BUFSIZ > 64 MiB defined"
#else
#define SMALLCHUNK BUFSIZ
# define SMALLCHUNK BUFSIZ
#endif
/*[clinic input]
module _io
class _io.FileIO "fileio *" "clinic_state()->PyFileIO_Type"

View File

@ -74,12 +74,15 @@
#include "pycore_long.h" // _PyLong_AsByteArray()
#include "pycore_moduleobject.h" // _PyModule_GetState()
#include "pycore_pylifecycle.h" // _PyOS_URandomNonblock()
#ifdef HAVE_UNISTD_H
# include <unistd.h> // getpid()
#endif
#ifdef HAVE_PROCESS_H
# include <process.h> // getpid()
#endif
#ifdef MS_WINDOWS
# include <windows.h>
# include <windows.h> // GetCurrentProcessId()
#endif
/* Period parameters -- These are all magic. Don't change. */

View File

@ -6,8 +6,10 @@
#include "pycore_sysmodule.h" // _PySys_GetAttr()
#include "pycore_traceback.h" // _Py_DumpTracebackThreads
#include <object.h>
#include <signal.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h> // _exit()
#endif
#include <signal.h> // sigaction()
#include <stdlib.h> // abort()
#if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK) && defined(HAVE_PTHREAD_H)
# include <pthread.h>
@ -16,7 +18,7 @@
# include <windows.h>
#endif
#ifdef HAVE_SYS_RESOURCE_H
# include <sys/resource.h>
# include <sys/resource.h> // setrlimit()
#endif
#if defined(FAULTHANDLER_USE_ALT_STACK) && defined(HAVE_LINUX_AUXVEC_H) && defined(HAVE_SYS_AUXV_H)
@ -24,6 +26,7 @@
# include <sys/auxv.h> // getauxval()
#endif
/* Allocate at maximum 100 MiB of the stack to raise the stack overflow */
#define STACK_OVERFLOW_MAX_SIZE (100 * 1024 * 1024)

View File

@ -24,6 +24,10 @@
#include "pycore_pystate.h" // _PyInterpreterState_GET()
#include "pycore_signal.h" // Py_NSIG
#ifdef HAVE_UNISTD_H
# include <unistd.h> // symlink()
#endif
#ifdef MS_WINDOWS
# include <windows.h>
# if !defined(MS_WINDOWS_GAMES) || defined(MS_WINDOWS_DESKTOP)
@ -37,7 +41,6 @@
# endif /* MS_WINDOWS_DESKTOP | MS_WINDOWS_SYSTEM */
#endif
#ifndef MS_WINDOWS
# include "posixmodule.h"
#else
@ -285,10 +288,6 @@ corresponding Unix manual entries for more information on calls.");
# include <sched.h>
#endif
#ifdef HAVE_COPY_FILE_RANGE
# include <unistd.h> // copy_file_range()
#endif
#if !defined(CPU_ALLOC) && defined(HAVE_SCHED_SETAFFINITY)
# undef HAVE_SCHED_SETAFFINITY
#endif

View File

@ -4,15 +4,19 @@
#include "pycore_call.h" // _PyObject_CallNoArgs()
#include "pycore_runtime.h" // _PyRuntime
#ifdef HAVE_UNISTD_H
# include <unistd.h> // isatty()
#endif
#if defined(HAVE_GETC_UNLOCKED) && !defined(_Py_MEMORY_SANITIZER)
/* clang MemorySanitizer doesn't yet understand getc_unlocked. */
#define GETC(f) getc_unlocked(f)
#define FLOCKFILE(f) flockfile(f)
#define FUNLOCKFILE(f) funlockfile(f)
/* clang MemorySanitizer doesn't yet understand getc_unlocked. */
# define GETC(f) getc_unlocked(f)
# define FLOCKFILE(f) flockfile(f)
# define FUNLOCKFILE(f) funlockfile(f)
#else
#define GETC(f) getc(f)
#define FLOCKFILE(f)
#define FUNLOCKFILE(f)
# define GETC(f) getc(f)
# define FLOCKFILE(f)
# define FUNLOCKFILE(f)
#endif
/* Newline flags */

View File

@ -19,6 +19,10 @@
# include "windows.h"
#endif /* MS_WINDOWS */
#ifdef HAVE_UNISTD_H
# include <unistd.h> // isatty()
#endif
// Export the symbol since it's used by the readline shared extension
PyAPI_DATA(PyThreadState*) _PyOS_ReadlineTState;

View File

@ -4,10 +4,12 @@
#include "Python.h"
#include "pycore_call.h" // _PyObject_CallNoArgs()
#include <assert.h>
#include "tokenizer.h" // struct tok_state
#include "errcode.h" // E_OK
#include "tokenizer.h"
#include "errcode.h"
#ifdef HAVE_UNISTD_H
# include <unistd.h> // read()
#endif
/* Alternate tab spacing */
#define ALTTABSIZE 1

View File

@ -17,6 +17,11 @@
#include "clinic/bltinmodule.c.h"
#ifdef HAVE_UNISTD_H
# include <unistd.h> // isatty()
#endif
static PyObject*
update_bases(PyObject *bases, PyObject *const *args, Py_ssize_t nargs)
{

View File

@ -4,22 +4,28 @@
#include "pycore_pylifecycle.h" // _PyOS_URandomNonblock()
#include "pycore_runtime.h" // _PyRuntime
#undef HAVE_GETRANDOM
#undef HAVE_GETENTROPY
#ifdef HAVE_UNISTD_H
# include <unistd.h> // close()
#endif
#ifdef MS_WINDOWS
# include <windows.h>
# include <bcrypt.h>
#else
# include <fcntl.h>
# include <fcntl.h> // O_RDONLY
# ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
# endif
# ifdef HAVE_LINUX_RANDOM_H
# include <linux/random.h>
# include <linux/random.h> // GRND_NONBLOCK
# endif
# if defined(HAVE_SYS_RANDOM_H) && (defined(HAVE_GETRANDOM) || defined(HAVE_GETENTROPY))
# include <sys/random.h>
# include <sys/random.h> // getrandom()
# endif
# if !defined(HAVE_GETRANDOM) && defined(HAVE_GETRANDOM_SYSCALL)
# include <sys/syscall.h>
# include <sys/syscall.h> // SYS_getrandom
# endif
#endif

View File

@ -2,8 +2,11 @@
#include "pycore_fileutils.h" // fileutils definitions
#include "pycore_runtime.h" // _PyRuntime
#include "osdefs.h" // SEP
#include <locale.h>
#include <stdlib.h> // mbstowcs()
#ifdef HAVE_UNISTD_H
# include <unistd.h> // getcwd()
#endif
#ifdef MS_WINDOWS
# include <malloc.h>
@ -19,7 +22,7 @@ extern int winerror_to_errno(int);
#endif
#ifdef HAVE_LANGINFO_H
#include <langinfo.h>
# include <langinfo.h> // nl_langinfo(CODESET)
#endif
#ifdef HAVE_SYS_IOCTL_H
@ -27,12 +30,12 @@ extern int winerror_to_errno(int);
#endif
#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION
#include <iconv.h>
# include <iconv.h> // iconv_open()
#endif
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif /* HAVE_FCNTL_H */
# include <fcntl.h> // fcntl(F_GETFD)
#endif
#ifdef O_CLOEXEC
/* Does open() support the O_CLOEXEC flag? Possible values:

View File

@ -3,7 +3,11 @@
#include "Python.h"
#include "pycore_pystate.h" // _Py_GetConfig()
#include "pycore_runtime.h" // _PyRuntime_Initialize()
#include <locale.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h> // isatty()
#endif
#ifdef MS_WINDOWS
extern void PyWinFreeze_ExeInit(void);

View File

@ -37,6 +37,9 @@
#include <locale.h> // setlocale()
#include <stdlib.h> // getenv()
#ifdef HAVE_UNISTD_H
# include <unistd.h> // isatty()
#endif
#if defined(__APPLE__)
# include <mach-o/loader.h>

View File

@ -40,7 +40,9 @@ Data members:
#include "osdefs.h" // DELIM
#include "stdlib_module_names.h" // _Py_stdlib_module_names
#include <locale.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h> // getpid()
#endif
#ifdef MS_WINDOWS
# define WIN32_LEAN_AND_MEAN

View File

@ -20,13 +20,14 @@
#include "frameobject.h" // PyFrame_New()
#include "osdefs.h" // SEP
#ifdef HAVE_FCNTL_H
# include <fcntl.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h> // lseek()
#endif
#define OFF(x) offsetof(PyTracebackObject, x)
#define OFF(x) offsetof(PyTracebackObject, x)
#define PUTS(fd, str) (void)_Py_write_noraise(fd, str, (int)strlen(str))
#define MAX_STRING_LENGTH 500
#define MAX_FRAME_DEPTH 100
#define MAX_NTHREADS 100