Skip to content
Snippets Groups Projects
Commit 4898c37e03c0 authored by Steve Borho's avatar Steve Borho
Browse files

win32: backout 1a9ebc83a74c

This change conflicted with TortoiseHg's use of QFileSystemWatcher. Files which
were being monitored (for file-system events) were unable to be reliably updated
using util.atomictempfile.  Often the update would error out in the middle of
the process leaving neither the old or the new file in place.

My guess is that _kernel32.CreateFileA() is triggering an exception that is
not handled correctly within unlink()
parent cadad384c97c
No related branches found
No related tags found
No related merge requests found
......@@ -25,7 +25,6 @@
# GetLastError
_ERROR_SUCCESS = 0
_ERROR_NO_MORE_FILES = 18
_ERROR_SHARING_VIOLATION = 32
_ERROR_INVALID_PARAMETER = 87
_ERROR_INSUFFICIENT_BUFFER = 122
......@@ -61,5 +60,4 @@
_OPEN_EXISTING = 3
_FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
_FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
......@@ -65,5 +63,4 @@
_FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
_FILE_FLAG_DELETE_ON_CLOSE = 0x04000000
# SetFileAttributes
_FILE_ATTRIBUTE_NORMAL = 0x80
......@@ -424,18 +421,11 @@
def unlink(f):
'''try to implement POSIX' unlink semantics on Windows'''
# If we can open f exclusively, no other processes must have open handles
# for it and we can expect its name will be deleted immediately when we
# close the handle unless we have another in the same process. We also
# expect we shall simply fail to open f if it is a directory.
fh = _kernel32.CreateFileA(f, 0, 0, None, _OPEN_EXISTING,
_FILE_FLAG_OPEN_REPARSE_POINT | _FILE_FLAG_DELETE_ON_CLOSE, None)
if fh != _INVALID_HANDLE_VALUE:
_kernel32.CloseHandle(fh)
return
error = _kernel32.GetLastError()
if error != _ERROR_SHARING_VIOLATION:
raise ctypes.WinError(error)
if os.path.isdir(f):
# use EPERM because it is POSIX prescribed value, even though
# unlink(2) on directories returns EISDIR on Linux
raise IOError(errno.EPERM,
"Unlinking directory not permitted: '%s'" % f)
# POSIX allows to unlink and rename open files. Windows has serious
# problems with doing that:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment