Module: wine Branch: master Commit: d88863805dc4b79d965577a31b2845c0c81a09d9 URL: https://gitlab.winehq.org/wine/wine/-/commit/d88863805dc4b79d965577a31b2845c...
Author: Brendan McGrath bmcgrath@codeweavers.com Date: Wed May 29 11:52:18 2024 +1000
server: Don't always return STATUS_OBJECT_NAME_INVALID on ENOTDIR.
Only return STATUS_OBJECT_NAME_INVALID if we're not looking for a FILE_DIRECTORY_FILE.
---
dlls/kernel32/tests/file.c | 1 - dlls/ntdll/tests/file.c | 1 - server/fd.c | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c index 9e5c1e4c594..940b1441e19 100644 --- a/dlls/kernel32/tests/file.c +++ b/dlls/kernel32/tests/file.c @@ -2769,7 +2769,6 @@ static void test_FindFirstFileA(void) handle = FindFirstFileA(buffer2, &data); err = GetLastError(); ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should fail\n", buffer2 ); - todo_wine ok ( err == ERROR_DIRECTORY, "Bad Error number %x\n", err ); }
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c index 7961abad1b1..7d3618a3804 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c @@ -419,7 +419,6 @@ static void open_file_test(void) status = NtOpenFile( &handle, FILE_LIST_DIRECTORY | SYNCHRONIZE, &attr, &io, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT | FILE_OPEN_FOR_BACKUP_INTENT ); - todo_wine ok( status == STATUS_NOT_A_DIRECTORY, "open %s failed %lx\n", wine_dbgstr_w(nameW.Buffer), status ); CloseHandle( handle ); pRtlFreeUnicodeString( &nameW ); diff --git a/server/fd.c b/server/fd.c index fc7f7be92b9..f28937466fc 100644 --- a/server/fd.c +++ b/server/fd.c @@ -1942,7 +1942,7 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam if (fd->unix_fd == -1) { /* check for trailing slash on file path */ - if ((errno == ENOENT || errno == ENOTDIR) && name[strlen(name) - 1] == '/') + if ((errno == ENOENT || (errno == ENOTDIR && !(options & FILE_DIRECTORY_FILE))) && name[strlen(name) - 1] == '/') set_error( STATUS_OBJECT_NAME_INVALID ); else file_set_error();