diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2003-10-08 09:17:08 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2003-10-08 09:17:08 +0000 |
commit | 99439385c6a340db289d2221b481aee095f225aa (patch) | |
tree | 5a6e9cdcd5fc05e99e85f6a421c97c0895c0fc13 /winsup/cygwin/syscalls.cc | |
parent | 56efe3a884128b417ff5ffa1d40a91ba36d45d8b (diff) | |
download | cygnal-99439385c6a340db289d2221b481aee095f225aa.tar.gz cygnal-99439385c6a340db289d2221b481aee095f225aa.tar.bz2 cygnal-99439385c6a340db289d2221b481aee095f225aa.zip |
* syscalls.cc (unlink): Don't even try DELETE_ON_CLOSE technique on
systems not supporting it.
Diffstat (limited to 'winsup/cygwin/syscalls.cc')
-rw-r--r-- | winsup/cygwin/syscalls.cc | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 8c53af20e..3444babcf 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -171,26 +171,29 @@ unlink (const char *ourname) } /* Attempt to use "delete on close" semantics to handle removing a file which may be open. */ - HANDLE h; - h = CreateFile (win32_name, 0, FILE_SHARE_READ, &sec_none_nih, - OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0); - if (h != INVALID_HANDLE_VALUE) - { - if (wincap.has_hard_links () && setattrs) - (void) SetFileAttributes (win32_name, (DWORD) win32_name); - BOOL res = CloseHandle (h); - syscall_printf ("%d = CloseHandle (%p)", res, h); - if (GetFileAttributes (win32_name) == INVALID_FILE_ATTRIBUTES - || !win32_name.isremote ()) - { - syscall_printf ("CreateFile (FILE_FLAG_DELETE_ON_CLOSE) succeeded"); - goto ok; - } - else + if (wincap.has_delete_on_close ()) + { + HANDLE h; + h = CreateFile (win32_name, 0, FILE_SHARE_READ, &sec_none_nih, + OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0); + if (h != INVALID_HANDLE_VALUE) { - syscall_printf ("CreateFile (FILE_FLAG_DELETE_ON_CLOSE) failed"); - if (setattrs) - SetFileAttributes (win32_name, (DWORD) win32_name & ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM)); + if (wincap.has_hard_links () && setattrs) + (void) SetFileAttributes (win32_name, (DWORD) win32_name); + BOOL res = CloseHandle (h); + syscall_printf ("%d = CloseHandle (%p)", res, h); + if (GetFileAttributes (win32_name) == INVALID_FILE_ATTRIBUTES + || !win32_name.isremote ()) + { + syscall_printf ("CreateFile (FILE_FLAG_DELETE_ON_CLOSE) succeeded"); + goto ok; + } + else + { + syscall_printf ("CreateFile (FILE_FLAG_DELETE_ON_CLOSE) failed"); + if (setattrs) + SetFileAttributes (win32_name, (DWORD) win32_name & ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM)); + } } } |