Module: wine Branch: master Commit: fef675e764d268d85be9f9ad2b2e62b66e1b1511 URL: https://source.winehq.org/git/wine.git/?a=commit;h=fef675e764d268d85be9f9ad2...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Jun 28 13:01:26 2022 +0200
ntdll: Fix returned status code for non-directory in path.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/tests/file.c | 2 -- dlls/ntdll/tests/path.c | 8 ++++---- dlls/ntdll/unix/file.c | 6 +++--- 3 files changed, 7 insertions(+), 9 deletions(-)
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c index b0b8eee1f2f..f8ef38f38c2 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c @@ -417,11 +417,9 @@ static void open_file_test(void) pRtlDosPathNameToNtPathName_U( path, &nameW, NULL, NULL ); status = pNtOpenFile( &handle, GENERIC_READ, &attr, &io, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_DIRECTORY_FILE ); - todo_wine ok( status == STATUS_OBJECT_PATH_NOT_FOUND, "open %s failed %lx\n", wine_dbgstr_w(nameW.Buffer), status ); status = pNtOpenFile( &handle, GENERIC_READ, &attr, &io, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_NON_DIRECTORY_FILE ); - todo_wine ok( status == STATUS_OBJECT_PATH_NOT_FOUND, "open %s failed %lx\n", wine_dbgstr_w(nameW.Buffer), status ); pRtlFreeUnicodeString( &nameW );
diff --git a/dlls/ntdll/tests/path.c b/dlls/ntdll/tests/path.c index 0931d61450d..d5d6e9c217a 100644 --- a/dlls/ntdll/tests/path.c +++ b/dlls/ntdll/tests/path.c @@ -653,9 +653,9 @@ static void test_nt_names(void) { NULL, L"\??\C:\windows\system32\\", STATUS_OBJECT_NAME_INVALID }, { NULL, L"\??\C:\windows\system32\foobar\", STATUS_OBJECT_NAME_NOT_FOUND }, { NULL, L"\??\C:\windows\system32\kernel32.dll\", STATUS_OBJECT_NAME_INVALID, 0, TRUE }, - { NULL, L"\??\C:\windows\system32\kernel32.dll\foo", STATUS_OBJECT_PATH_NOT_FOUND, 0, TRUE }, + { NULL, L"\??\C:\windows\system32\kernel32.dll\foo", STATUS_OBJECT_PATH_NOT_FOUND }, { NULL, L"\??\C:\windows\system32\Kernel32.Dll\", STATUS_OBJECT_NAME_INVALID, 0, TRUE }, - { NULL, L"\??\C:\windows\system32\Kernel32.Dll\foo", STATUS_OBJECT_PATH_NOT_FOUND, 0, TRUE }, + { NULL, L"\??\C:\windows\system32\Kernel32.Dll\foo", STATUS_OBJECT_PATH_NOT_FOUND }, { NULL, L"\??\C:\windows\sys\001", STATUS_OBJECT_NAME_INVALID }, { L"\??\", NULL, STATUS_OBJECT_NAME_INVALID }, { L"\??\C:\", NULL, STATUS_SUCCESS }, @@ -679,9 +679,9 @@ static void test_nt_names(void) { L"\??\C:\windows\", L"system32\\", STATUS_OBJECT_NAME_INVALID }, { L"\??\C:\windows\", L"system32\foobar\", STATUS_OBJECT_NAME_NOT_FOUND }, { L"\??\C:\windows\", L"system32\kernel32.dll\", STATUS_OBJECT_NAME_INVALID, 0, TRUE }, - { L"\??\C:\windows\", L"system32\kernel32.dll\foo", STATUS_OBJECT_PATH_NOT_FOUND, 0, TRUE }, + { L"\??\C:\windows\", L"system32\kernel32.dll\foo", STATUS_OBJECT_PATH_NOT_FOUND }, { L"\??\C:\windows\", L"system32\Kernel32.Dll\", STATUS_OBJECT_NAME_INVALID, 0, TRUE }, - { L"\??\C:\windows\", L"system32\Kernel32.Dll\foo", STATUS_OBJECT_PATH_NOT_FOUND, 0, TRUE }, + { L"\??\C:\windows\", L"system32\Kernel32.Dll\foo", STATUS_OBJECT_PATH_NOT_FOUND }, { L"\??\C:\windows\", L"\system32\kernel32.dll", STATUS_INVALID_PARAMETER }, { L"\??\C:\windows\", L"/system32\kernel32.dll", STATUS_OBJECT_NAME_INVALID }, { L"\??\C:\windows\", L".\system32\kernel32.dll", STATUS_OBJECT_NAME_INVALID, STATUS_OBJECT_PATH_NOT_FOUND }, diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c index cc8bf0c6e82..4873f7f093c 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c @@ -2594,7 +2594,7 @@ static NTSTATUS find_file_in_dir( char *unix_name, int pos, const WCHAR *name, i
not_found: unix_name[pos - 1] = 0; - return STATUS_OBJECT_PATH_NOT_FOUND; + return STATUS_OBJECT_NAME_NOT_FOUND; }
@@ -3200,9 +3200,8 @@ static NTSTATUS lookup_unix_name( const WCHAR *name, int name_len, char **buffer /* if this is the last element, not finding it is not necessarily fatal */ if (!name_len) { - if (status == STATUS_OBJECT_PATH_NOT_FOUND) + if (status == STATUS_OBJECT_NAME_NOT_FOUND) { - status = STATUS_OBJECT_NAME_NOT_FOUND; if (disposition != FILE_OPEN && disposition != FILE_OVERWRITE) { ret = ntdll_wcstoumbs( name, end - name, unix_name + pos + 1, MAX_DIR_ENTRY_LEN + 1, TRUE ); @@ -3220,6 +3219,7 @@ static NTSTATUS lookup_unix_name( const WCHAR *name, int name_len, char **buffer status = STATUS_OBJECT_NAME_COLLISION; } } + else if (status == STATUS_OBJECT_NAME_NOT_FOUND) status = STATUS_OBJECT_PATH_NOT_FOUND;
if (status != STATUS_SUCCESS) break;