aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2024-04-04 17:36:01 +0200
committerCorinna Vinschen <corinna@vinschen.de>2024-04-04 18:21:13 +0200
commit56e7563b9aa665f35b657537e46a7feb4726f763 (patch)
tree7d26e818cefb482877446d989bee6dd7b3fddfd2
parented50a50b9b551ed693d28cd458a49e5196d27f06 (diff)
downloadnewlib-56e7563b9aa665f35b657537e46a7feb4726f763.zip
newlib-56e7563b9aa665f35b657537e46a7feb4726f763.tar.gz
newlib-56e7563b9aa665f35b657537e46a7feb4726f763.tar.bz2
Cygwin: FILE_OPEN_NO_RECALL is incompatible with FILE_DIRECTORY_FILE
If FILE_DIRECTORY_FILE is given, FILE_OPEN_NO_RECALL is not allowed, otherwise NtCreateFile returns STATUS_INVALID_PARAMETER. Drop FILE_OPEN_NO_RECALL where FILE_DIRECTORY_FILE is specified. Fixes: f6b56abec186 ("Cygwin: try to avoid recalling offline files") Reported-by: Bruce Jerrick <bmj001@gmail.com> Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r--winsup/cygwin/fhandler/disk_file.cc1
-rw-r--r--winsup/cygwin/path.cc2
-rw-r--r--winsup/cygwin/release/3.5.46
3 files changed, 6 insertions, 3 deletions
diff --git a/winsup/cygwin/fhandler/disk_file.cc b/winsup/cygwin/fhandler/disk_file.cc
index 865a05a..724ce7f 100644
--- a/winsup/cygwin/fhandler/disk_file.cc
+++ b/winsup/cygwin/fhandler/disk_file.cc
@@ -325,7 +325,6 @@ fhandler_base::fstat_by_name (struct stat *buf)
status = NtOpenFile (&dir, SYNCHRONIZE | FILE_LIST_DIRECTORY,
&attr, &io, FILE_SHARE_VALID_FLAGS,
FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_NO_RECALL
| FILE_OPEN_FOR_BACKUP_INTENT
| FILE_DIRECTORY_FILE);
if (!NT_SUCCESS (status))
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index fa5ceea..5cfcbc0 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -608,7 +608,6 @@ getfileattr (const char *path, bool caseinsensitive) /* path has to be always ab
status = NtOpenFile (&dir, SYNCHRONIZE | FILE_LIST_DIRECTORY,
&attr, &io, FILE_SHARE_VALID_FLAGS,
FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_NO_RECALL
| FILE_OPEN_FOR_BACKUP_INTENT
| FILE_DIRECTORY_FILE);
if (NT_SUCCESS (status))
@@ -3340,7 +3339,6 @@ restart:
status = NtOpenFile (&dir, SYNCHRONIZE | FILE_LIST_DIRECTORY,
&dattr, &io, FILE_SHARE_VALID_FLAGS,
FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_NO_RECALL
| FILE_OPEN_FOR_BACKUP_INTENT
| FILE_DIRECTORY_FILE);
if (!NT_SUCCESS (status))
diff --git a/winsup/cygwin/release/3.5.4 b/winsup/cygwin/release/3.5.4
new file mode 100644
index 0000000..e2bd025
--- /dev/null
+++ b/winsup/cygwin/release/3.5.4
@@ -0,0 +1,6 @@
+Fixes:
+------
+
+- Fix regression in 3.5.3 which fails to open files for stat(2) if the
+ file is opened exclusively by another process.
+ Addresses: https://cygwin.com/pipermail/cygwin/2024-April/255811.html