Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Doc/whatsnew/3.13.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
30 changes: 23 additions & 7 deletions Include/cpython/pthread_stubs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
# define __NEED_pthread_cond_t 1
# define __NEED_pthread_condattr_t 1
# define __NEED_pthread_mutex_t 1
# define __NEED_pthread_mutexattr_t 1
# define __NEED_pthread_key_t 1
# define __NEED_pthread_t 1
# define __NEED_pthread_attr_t 1
//
// <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;
Expand Down
3 changes: 2 additions & 1 deletion Include/internal/pycore_pythread.h
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down Expand Up @@ -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;
Expand Down
34 changes: 19 additions & 15 deletions Modules/_io/fileio.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"

/*
Expand All @@ -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"
Expand Down
7 changes: 5 additions & 2 deletions Modules/_randommodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand Down
9 changes: 6 additions & 3 deletions Modules/faulthandler.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -16,14 +18,15 @@
# 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)
# include <linux/auxvec.h> // AT_MINSIGSTKSZ
# 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)

Expand Down
9 changes: 4 additions & 5 deletions Modules/posixmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -37,7 +41,6 @@
# endif /* MS_WINDOWS_DESKTOP | MS_WINDOWS_SYSTEM */
#endif


#ifndef MS_WINDOWS
# include "posixmodule.h"
#else
Expand Down Expand Up @@ -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
Expand Down
18 changes: 11 additions & 7 deletions Objects/fileobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
6 changes: 5 additions & 1 deletion Parser/myreadline.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,15 @@
#include "pycore_pystate.h" // _PyThreadState_GET()
#ifdef MS_WINDOWS
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# 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;
Expand Down
8 changes: 5 additions & 3 deletions Parser/tokenizer.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions Python/bltinmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
14 changes: 10 additions & 4 deletions Python/bootstrap_hash.c
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
13 changes: 8 additions & 5 deletions Python/fileutils.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -19,20 +22,20 @@ 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
#include <sys/ioctl.h>
#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:
Expand Down
6 changes: 5 additions & 1 deletion Python/frozenmain.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
3 changes: 3 additions & 0 deletions Python/pylifecycle.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
4 changes: 3 additions & 1 deletion Python/sysmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 4 additions & 3 deletions Python/traceback.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down