Skip to content

gh-108765: Python.h no longer includes <unistd.h> #108783

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 2, 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
5 changes: 5 additions & 0 deletions Doc/whatsnew/3.13.rst
Original file line number Diff line number Diff line change
Expand Up @@ -921,6 +921,11 @@ Porting to Python 3.13
also the ``HAVE_IEEEFP_H`` macro.
(Contributed by Victor Stinner in :gh:`108765`.)

* ``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()``.
(Contributed by Victor Stinner in :gh:`108765`.)

Deprecated
----------

Expand Down
11 changes: 5 additions & 6 deletions Include/Python.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,13 @@
#ifdef HAVE_STDDEF_H
# include <stddef.h> // size_t
#endif
#ifndef MS_WINDOWS
# include <unistd.h> // sysconf()
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h> // ssize_t
#endif

// errno.h, stdio.h, stdlib.h and string.h headers are no longer used by Python
// headers, but kept for backward compatibility (no introduce new compiler
// warnings). They are not included by the limited C API version 3.11 and
// above.
// errno.h, stdio.h, stdlib.h and string.h headers are no longer used by
// Python, but kept for backward compatibility (avoid compiler warnings).
// They are no longer included by limited C API version 3.11 and newer.
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
# include <errno.h> // errno
# include <stdio.h> // FILE*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
``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()``.
Patch by Victor Stinner.
13 changes: 7 additions & 6 deletions Modules/_ctypes/malloc_closure.c
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
#ifndef Py_BUILD_CORE_BUILTIN
# define Py_BUILD_CORE_MODULE 1
#endif

#include <Python.h>
#include <ffi.h>
#ifdef MS_WIN32
#include <windows.h>
# include <windows.h>
#else
#include <sys/mman.h>
#include <unistd.h>
# if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
# define MAP_ANONYMOUS MAP_ANON
# endif
# include <sys/mman.h>
# include <unistd.h> // sysconf()
# if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
# define MAP_ANONYMOUS MAP_ANON
# endif
#endif
#include "ctypes.h"

Expand Down
22 changes: 11 additions & 11 deletions Modules/_posixsubprocess.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,28 @@
#include "pycore_pystate.h"
#include "pycore_signal.h" // _Py_RestoreSignals()
#if defined(HAVE_PIPE2) && !defined(_GNU_SOURCE)
# define _GNU_SOURCE
# define _GNU_SOURCE
#endif
#include <unistd.h>
#include <fcntl.h>
#include <unistd.h> // close()
#include <fcntl.h> // fcntl()
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
# include <sys/types.h>
#endif
#if defined(HAVE_SYS_STAT_H)
#include <sys/stat.h>
# include <sys/stat.h> // stat()
#endif
#ifdef HAVE_SYS_SYSCALL_H
#include <sys/syscall.h>
# include <sys/syscall.h>
#endif
#if defined(HAVE_SYS_RESOURCE_H)
#include <sys/resource.h>
# include <sys/resource.h>
#endif
#ifdef HAVE_DIRENT_H
#include <dirent.h>
# include <dirent.h> // opendir()
#endif
#if defined(HAVE_SETGROUPS)
# include <grp.h> // setgroups()
#endif
#ifdef HAVE_GRP_H
#include <grp.h>
#endif /* HAVE_GRP_H */

#include "posixmodule.h"

Expand Down
3 changes: 0 additions & 3 deletions Modules/_testcapimodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,6 @@
#include <float.h> // FLT_MAX
#include <signal.h>
#include <stddef.h> // offsetof()
#ifndef MS_WINDOWS
# include <unistd.h>
#endif

#ifdef HAVE_SYS_WAIT_H
# include <sys/wait.h> // W_STOPCODE
Expand Down
3 changes: 2 additions & 1 deletion Modules/grpmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
#include "Python.h"
#include "posixmodule.h"

#include <grp.h>
#include <grp.h> // getgrgid_r()
#include <unistd.h> // sysconf()

#include "clinic/grpmodule.c.h"
/*[clinic input]
Expand Down
3 changes: 3 additions & 0 deletions Modules/mmapmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@
#include "pycore_fileutils.h" // _Py_stat_struct

#include <stddef.h> // offsetof()
#ifndef MS_WINDOWS
# include <unistd.h> // close()
#endif

// to support MS_WINDOWS_SYSTEM OpenFileMappingA / CreateFileMappingA
// need to be replaced with OpenFileMappingW / CreateFileMappingW
Expand Down
2 changes: 1 addition & 1 deletion Modules/posixmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ corresponding Unix manual entries for more information on calls.");
#endif

#ifdef HAVE_COPY_FILE_RANGE
# include <unistd.h>
# include <unistd.h> // copy_file_range()
#endif

#if !defined(CPU_ALLOC) && defined(HAVE_SCHED_SETAFFINITY)
Expand Down
3 changes: 2 additions & 1 deletion Modules/pwdmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
#include "Python.h"
#include "posixmodule.h"

#include <pwd.h>
#include <pwd.h> // getpwuid()
#include <unistd.h> // sysconf()

#include "clinic/pwdmodule.c.h"
/*[clinic input]
Expand Down
11 changes: 5 additions & 6 deletions Modules/resource.c
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@

#include "Python.h"
#include <sys/resource.h>
#include <errno.h> // errno
#include <string.h>
#include <sys/resource.h> // getrusage()
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
# include <sys/time.h>
#endif
#include <time.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <unistd.h> // getpagesize()

/* On some systems, these aren't in any header file.
On others they are, with inconsistent prototypes.
Expand Down
3 changes: 3 additions & 0 deletions Modules/selectmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
#include "pycore_time.h" // _PyTime_t

#include <stddef.h> // offsetof()
#ifndef MS_WINDOWS
# include <unistd.h> // close()
#endif

#ifdef HAVE_SYS_DEVPOLL_H
#include <sys/resource.h>
Expand Down
2 changes: 1 addition & 1 deletion Modules/socketmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ shutdown(how) -- shut down traffic in one or both directions\n\
#ifdef HAVE_NETDB_H
# include <netdb.h>
#endif
# include <unistd.h>
#include <unistd.h> // close()

/* Headers needed for inet_ntoa() and inet_addr() */
# include <arpa/inet.h>
Expand Down
2 changes: 1 addition & 1 deletion Programs/_freeze_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#ifndef MS_WINDOWS
#include <unistd.h>
# include <unistd.h>
#endif

uint32_t _Py_next_func_version = 1;
Expand Down
6 changes: 3 additions & 3 deletions Python/dup2.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
* Return fd2 if all went well; return BADEXIT otherwise.
*/

#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h> // errno
#include <fcntl.h> // fcntl()
#include <unistd.h> // close()

#define BADEXIT -1

Expand Down
4 changes: 2 additions & 2 deletions Python/perf_trampoline.c
Original file line number Diff line number Diff line change
Expand Up @@ -140,9 +140,9 @@ any DWARF information available for them).
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/mman.h> // mmap()
#include <sys/types.h>
#include <unistd.h>
#include <unistd.h> // sysconf()

#if defined(__arm__) || defined(__arm64__) || defined(__aarch64__)
#define PY_HAVE_INVALIDATE_ICACHE
Expand Down