Author: Armin Rigo <[email protected]>
Branch: py3.5-noninherit
Changeset: r86562:3bab49408735
Date: 2016-08-26 16:05 +0200
http://bitbucket.org/pypy/pypy/changeset/3bab49408735/
Log: os.open()
diff --git a/pypy/module/posix/interp_posix.py
b/pypy/module/posix/interp_posix.py
--- a/pypy/module/posix/interp_posix.py
+++ b/pypy/module/posix/interp_posix.py
@@ -209,6 +209,8 @@
space.w_NotImplementedError,
"%s: %s unavailable on this platform", funcname, arg)
+_open_inhcache = rposix.SetNonInheritableCache()
+
@unwrap_spec(flags=c_int, mode=c_int, dir_fd=DirFD(rposix.HAVE_OPENAT))
def open(space, w_path, flags, mode=0777,
__kwonly__=None, dir_fd=DEFAULT_DIR_FD):
@@ -220,12 +222,15 @@
and path should be relative; path will then be relative to that directory.
dir_fd may not be implemented on your platform.
If it is unavailable, using it will raise a NotImplementedError."""
+ if rposix.O_CLOEXEC is not None:
+ flags |= rposix.O_CLOEXEC
try:
if rposix.HAVE_OPENAT and dir_fd != DEFAULT_DIR_FD:
path = space.fsencode_w(w_path)
fd = rposix.openat(path, flags, mode, dir_fd)
else:
fd = dispatch_filename(rposix.open)(space, w_path, flags, mode)
+ _open_inhcache.set_non_inheritable(fd)
except OSError as e:
raise wrap_oserror2(space, e, w_path)
return space.wrap(fd)
diff --git a/pypy/module/posix/test/test_posix2.py
b/pypy/module/posix/test/test_posix2.py
--- a/pypy/module/posix/test/test_posix2.py
+++ b/pypy/module/posix/test/test_posix2.py
@@ -1117,6 +1117,13 @@
self.posix.close(fd1)
self.posix.close(fd2)
+ def test_open_inheritable(self):
+ os = self.posix
+ fd = os.open(self.path2 + 'test_open_inheritable',
+ os.O_RDWR | os.O_CREAT, 0o666)
+ assert os.get_inheritable(fd) == False
+ os.close(fd)
+
def test_urandom(self):
os = self.posix
s = os.urandom(5)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit