summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2023-09-02 14:50:18 (GMT)
committerGitHub <noreply@github.com>2023-09-02 14:50:18 (GMT)
commit594b00057e667e0d8d4e41748be056cdd829e919 (patch)
treeb970b7d385d30e9bb423a30bc3029cc94fe4ca4b
parent4f9b706c6f5d4422a398146bfd011daedaef1851 (diff)
downloadcpython-594b00057e667e0d8d4e41748be056cdd829e919.zip
cpython-594b00057e667e0d8d4e41748be056cdd829e919.tar.gz
cpython-594b00057e667e0d8d4e41748be056cdd829e919.tar.bz2
gh-108765: Python.h no longer includes <unistd.h> (#108783)
-rw-r--r--Doc/whatsnew/3.13.rst5
-rw-r--r--Include/Python.h11
-rw-r--r--Misc/NEWS.d/next/C API/2023-09-01-21-10-29.gh-issue-108765.eeXtYF.rst4
-rw-r--r--Modules/_ctypes/malloc_closure.c13
-rw-r--r--Modules/_posixsubprocess.c22
-rw-r--r--Modules/_testcapimodule.c3
-rw-r--r--Modules/grpmodule.c3
-rw-r--r--Modules/mmapmodule.c3
-rw-r--r--Modules/posixmodule.c2
-rw-r--r--Modules/pwdmodule.c3
-rw-r--r--Modules/resource.c11
-rw-r--r--Modules/selectmodule.c3
-rw-r--r--Modules/socketmodule.c2
-rw-r--r--Programs/_freeze_module.c2
-rw-r--r--Python/dup2.c6
-rw-r--r--Python/perf_trampoline.c4
16 files changed, 55 insertions, 42 deletions
diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst
index eb3d832..401de11 100644
--- a/Doc/whatsnew/3.13.rst
+++ b/Doc/whatsnew/3.13.rst
@@ -929,6 +929,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
----------
diff --git a/Include/Python.h b/Include/Python.h
index 002a79d..4cc72bb 100644
--- a/Include/Python.h
+++ b/Include/Python.h
@@ -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*
diff --git a/Misc/NEWS.d/next/C API/2023-09-01-21-10-29.gh-issue-108765.eeXtYF.rst b/Misc/NEWS.d/next/C API/2023-09-01-21-10-29.gh-issue-108765.eeXtYF.rst
new file mode 100644
index 0000000..ff8f799
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2023-09-01-21-10-29.gh-issue-108765.eeXtYF.rst
@@ -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.
diff --git a/Modules/_ctypes/malloc_closure.c b/Modules/_ctypes/malloc_closure.c
index 3a85932..bb4f8f2 100644
--- a/Modules/_ctypes/malloc_closure.c
+++ b/Modules/_ctypes/malloc_closure.c
@@ -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"
diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c
index ac2b0d4..ef76d26 100644
--- a/Modules/_posixsubprocess.c
+++ b/Modules/_posixsubprocess.c
@@ -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"
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index 4fc354a..ab33702 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -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
diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c
index f570929..20e83de 100644
--- a/Modules/grpmodule.c
+++ b/Modules/grpmodule.c
@@ -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]
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index c8cd7e5..d11200a 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -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
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 7615428..6e829b2 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -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)
diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c
index cc2e2a4..b703436 100644
--- a/Modules/pwdmodule.c
+++ b/Modules/pwdmodule.c
@@ -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]
diff --git a/Modules/resource.c b/Modules/resource.c
index 4614f5e..f5d9972 100644
--- a/Modules/resource.c
+++ b/Modules/resource.c
@@ -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.
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 4987cf0..c56e682 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -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>
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 2f12c9c..74b1c1c 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -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>
diff --git a/Programs/_freeze_module.c b/Programs/_freeze_module.c
index e55f1d5..f6c46fa 100644
--- a/Programs/_freeze_module.c
+++ b/Programs/_freeze_module.c
@@ -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;
diff --git a/Python/dup2.c b/Python/dup2.c
index a1df049..936211f 100644
--- a/Python/dup2.c
+++ b/Python/dup2.c
@@ -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
diff --git a/Python/perf_trampoline.c b/Python/perf_trampoline.c
index b8885a3..10675bf 100644
--- a/Python/perf_trampoline.c
+++ b/Python/perf_trampoline.c
@@ -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