summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/fcntl.rst5
-rw-r--r--Doc/whatsnew/3.11.rst8
-rw-r--r--Misc/NEWS.d/next/Library/2021-12-08-19-15-03.bpo-46016.s9PuyF.rst1
-rw-r--r--Modules/fcntlmodule.c8
4 files changed, 22 insertions, 0 deletions
diff --git a/Doc/library/fcntl.rst b/Doc/library/fcntl.rst
index 9d80211..846c8d7 100644
--- a/Doc/library/fcntl.rst
+++ b/Doc/library/fcntl.rst
@@ -44,6 +44,11 @@ descriptor.
``F_SETPIPE_SZ`` constants, which allow to check and modify a pipe's size
respectively.
+.. versionchanged:: 3.11
+ On FreeBSD, the fcntl module exposes the ``F_DUP2FD`` and ``F_DUP2FD_CLOEXEC``
+ constants, which allow to duplicate a file descriptor, the latter setting
+ ``FD_CLOEXEC`` flag in addition.
+
The module defines the following functions:
diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst
index a570864..264a801 100644
--- a/Doc/whatsnew/3.11.rst
+++ b/Doc/whatsnew/3.11.rst
@@ -329,6 +329,14 @@ unicodedata
* The Unicode database has been updated to version 14.0.0. (:issue:`45190`).
+fcntl
+-----
+
+* On FreeBSD, the `F_DUP2FD` and `F_DUP2FD_CLOEXEC` flags respectively
+ are supported, the former equals to ``dup2`` usage while the latter set
+ the ``FD_CLOEXEC`` flag in addition.
+
+
Optimizations
=============
diff --git a/Misc/NEWS.d/next/Library/2021-12-08-19-15-03.bpo-46016.s9PuyF.rst b/Misc/NEWS.d/next/Library/2021-12-08-19-15-03.bpo-46016.s9PuyF.rst
new file mode 100644
index 0000000..7308c54
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-12-08-19-15-03.bpo-46016.s9PuyF.rst
@@ -0,0 +1 @@
+Adding `F_DUP2FD` and `F_DUP2FD_CLOEXEC` constants from FreeBSD into the fcntl module.
diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c
index cdf0f9b..ea9b2bc 100644
--- a/Modules/fcntlmodule.c
+++ b/Modules/fcntlmodule.c
@@ -581,6 +581,14 @@ all_ins(PyObject* m)
if (PyModule_AddIntMacro(m, F_NOCACHE)) return -1;
#endif
+/* FreeBSD specifics */
+#ifdef F_DUP2FD
+ if (PyModule_AddIntMacro(m, F_DUP2FD)) return -1;
+#endif
+#ifdef F_DUP2FD_CLOEXEC
+ if (PyModule_AddIntMacro(m, F_DUP2FD_CLOEXEC)) return -1;
+#endif
+
/* For F_{GET|SET}FL */
#ifdef FD_CLOEXEC
if (PyModule_AddIntMacro(m, FD_CLOEXEC)) return -1;