mirror of https://github.com/python/cpython
Issue #21515: Elaborate tempfile.TemporaryFile() comment
Explain why calling os.open() with os.O_TMPFILE is a safe test to check if O_TMPFILE is supported by the running kernel.
This commit is contained in:
parent
d17427b7bd
commit
9aba8c8a95
|
@ -591,12 +591,20 @@ else:
|
||||||
flags2 = (flags | _os.O_TMPFILE) & ~_os.O_CREAT
|
flags2 = (flags | _os.O_TMPFILE) & ~_os.O_CREAT
|
||||||
fd = _os.open(dir, flags2, 0o600)
|
fd = _os.open(dir, flags2, 0o600)
|
||||||
except IsADirectoryError:
|
except IsADirectoryError:
|
||||||
# Linux kernel older than 3.11 ignores O_TMPFILE flag.
|
# Linux kernel older than 3.11 ignores the O_TMPFILE flag:
|
||||||
# Set flag to False to not try again.
|
# O_TMPFILE is read as O_DIRECTORY. Trying to open a directory
|
||||||
|
# with O_RDWR|O_DIRECTORY fails with IsADirectoryError, a
|
||||||
|
# directory cannot be open to write. Set flag to False to not
|
||||||
|
# try again.
|
||||||
_O_TMPFILE_WORKS = False
|
_O_TMPFILE_WORKS = False
|
||||||
except OSError:
|
except OSError:
|
||||||
# The filesystem of the directory does not support O_TMPFILE.
|
# The filesystem of the directory does not support O_TMPFILE.
|
||||||
# For example, OSError(95, 'Operation not supported').
|
# For example, OSError(95, 'Operation not supported').
|
||||||
|
#
|
||||||
|
# On Linux kernel older than 3.11, trying to open a regular
|
||||||
|
# file (or a symbolic link to a regular file) with O_TMPFILE
|
||||||
|
# fails with NotADirectoryError, because O_TMPFILE is read as
|
||||||
|
# O_DIRECTORY.
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue