mirror of https://github.com/python/cpython
Windows fix: When PYTHONCASEOK is set, or for any other reason imports
are satisfied in a case-insensitive manner, the attempt to import (the non-existent) fcntl gets satisfied by FCNTL.py instead, and the tempfile module defines a Unix-specific _set_cloexec() function in that case. As a result, temp files can't be created then (blows up with an AttributeError trying to reference fcntl.fcntl). This just popped up in the spambayes project, where there is no apparent workaround (which is why I'm pushing this in now).
This commit is contained in:
parent
f1c9869ab0
commit
291f14e3d3
|
@ -38,15 +38,21 @@ if _os.name == 'mac':
|
|||
|
||||
try:
|
||||
import fcntl as _fcntl
|
||||
# If PYTHONCASEOK is set on Windows, stinking FCNTL.py gets
|
||||
# imported, and we don't get an ImportError then. Provoke
|
||||
# an AttributeError instead in that case.
|
||||
_fcntl.fcntl
|
||||
except (ImportError, AttributeError):
|
||||
def _set_cloexec(fd):
|
||||
pass
|
||||
else:
|
||||
def _set_cloexec(fd):
|
||||
flags = _fcntl.fcntl(fd, _fcntl.F_GETFD, 0)
|
||||
if flags >= 0:
|
||||
# flags read successfully, modify
|
||||
flags |= _fcntl.FD_CLOEXEC
|
||||
_fcntl.fcntl(fd, _fcntl.F_SETFD, flags)
|
||||
except (ImportError, AttributeError):
|
||||
def _set_cloexec(fd):
|
||||
pass
|
||||
|
||||
|
||||
try:
|
||||
import thread as _thread
|
||||
|
|
Loading…
Reference in New Issue