Cygwin: drop disabled O_TMPFILE POSIX unlink code
The commit message of commit 07e0a9584f
and the expectation set therein, are wrong.
There's no POSIX semantics allowing to link a file with a link
count of 0 and making it available in the file system again.
In fact, the Linux linkat extension AT_EMPTY_PATH explicitely
disallows to link a file descriptor to a file with a link count
of 0, except for O_TMPFILE without O_EXCL.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
353ebae304
commit
34d9bb7093
|
@ -1467,46 +1467,6 @@ open (const char *unix_path, int flags, ...)
|
||||||
if ((fh->is_fs_special () && fh->device_access_denied (flags))
|
if ((fh->is_fs_special () && fh->device_access_denied (flags))
|
||||||
|| !fh->open_with_arch (flags, mode & 07777))
|
|| !fh->open_with_arch (flags, mode & 07777))
|
||||||
__leave; /* errno already set */
|
__leave; /* errno already set */
|
||||||
#if 0
|
|
||||||
/* Don't use W10 1709 POSIX unlink semantics here.
|
|
||||||
|
|
||||||
Including W10 1809, NtSetInformationFile(FileLinkInformation) on a
|
|
||||||
HANDLE to a file unlinked with POSIX semantics fails with
|
|
||||||
STATUS_ACCESS_DENIED. Trying to remove the delete disposition on
|
|
||||||
the file prior to calling link fails with STATUS_FILE_DELETED.
|
|
||||||
This breaks
|
|
||||||
|
|
||||||
fd = open(O_TMPFILE);
|
|
||||||
linkat("/proc/self/fd/<fd>);
|
|
||||||
|
|
||||||
semantics. */
|
|
||||||
if ((flags & O_TMPFILE) && wincap.has_posix_file_info ()
|
|
||||||
&& !fh->pc.isremote () && fh->pc.fs_is_ntfs ())
|
|
||||||
{
|
|
||||||
HANDLE del_h;
|
|
||||||
OBJECT_ATTRIBUTES attr;
|
|
||||||
NTSTATUS status;
|
|
||||||
IO_STATUS_BLOCK io;
|
|
||||||
FILE_DISPOSITION_INFORMATION_EX fdie;
|
|
||||||
|
|
||||||
status = NtOpenFile (&del_h, DELETE,
|
|
||||||
fh->pc.init_reopen_attr (attr, fh->get_handle ()), &io,
|
|
||||||
FILE_SHARE_VALID_FLAGS, FILE_OPEN_FOR_BACKUP_INTENT);
|
|
||||||
if (!NT_SUCCESS (status))
|
|
||||||
debug_printf ("reopening tmpfile handle failed, status %y", status);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fdie.Flags = FILE_DISPOSITION_DELETE
|
|
||||||
| FILE_DISPOSITION_POSIX_SEMANTICS;
|
|
||||||
status = NtSetInformationFile (del_h, &io, &fdie, sizeof fdie,
|
|
||||||
FileDispositionInformationEx);
|
|
||||||
if (!NT_SUCCESS (status))
|
|
||||||
debug_printf ("Setting POSIX delete disposition on tmpfile "
|
|
||||||
"failed, status = %y", status);
|
|
||||||
NtClose (del_h);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
fd = fh;
|
fd = fh;
|
||||||
if (fd <= 2)
|
if (fd <= 2)
|
||||||
set_std_handle (fd);
|
set_std_handle (fd);
|
||||||
|
|
Loading…
Reference in New Issue