Issue #12105: Add O_CLOEXEC to the os module.
diff --git a/Doc/library/os.rst b/Doc/library/os.rst
index 86f587f..6ef6d9d 100644
--- a/Doc/library/os.rst
+++ b/Doc/library/os.rst
@@ -1298,6 +1298,7 @@
O_NOCTTY
O_SHLOCK
O_EXLOCK
+ O_CLOEXEC
These constants are only available on Unix.
diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py
index 0e9ac75..9c2cac3 100644
--- a/Lib/test/test_posix.py
+++ b/Lib/test/test_posix.py
@@ -9,6 +9,7 @@
import sys
import time
import os
+import fcntl
import pwd
import shutil
import stat
@@ -307,6 +308,12 @@
fp1.close()
fp2.close()
+ @unittest.skipUnless(hasattr(os, 'O_CLOEXEC'), "needs os.O_CLOEXEC")
+ def test_oscloexec(self):
+ fd = os.open(support.TESTFN, os.O_RDONLY|os.O_CLOEXEC)
+ self.addCleanup(os.close, fd)
+ self.assertTrue(fcntl.fcntl(fd, fcntl.F_GETFD) & fcntl.FD_CLOEXEC)
+
def test_osexlock(self):
if hasattr(posix, "O_EXLOCK"):
fd = os.open(support.TESTFN,
diff --git a/Misc/NEWS b/Misc/NEWS
index b341653..963ff89 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -153,6 +153,8 @@
Library
-------
+- Issue #12105: Add O_CLOEXEC to the os module.
+
- Issue #12079: Decimal('Infinity').fma(Decimal('0'), (3.91224318126786e+19+0j))
now raises TypeError (reflecting the invalid type of the 3rd argument) rather
than Decimal.InvalidOperation.
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 396243e..9c19ed0 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -9783,6 +9783,9 @@
#ifdef PRIO_USER
if (ins(d, "PRIO_USER", (long)PRIO_USER)) return -1;
#endif
+#ifdef O_CLOEXEC
+ if (ins(d, "O_CLOEXEC", (long)O_CLOEXEC)) return -1;
+#endif
/* posix - constants for *at functions */
#ifdef AT_SYMLINK_NOFOLLOW
if (ins(d, "AT_SYMLINK_NOFOLLOW", (long)AT_SYMLINK_NOFOLLOW)) return -1;