Follow up to https://bugs.winehq.org/show_bug.cgi?id=46927
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46934 Signed-off-by: Fabian Maurer dark.shadow4@web.de --- dlls/kernel32/file.c | 25 +++++++++++++++++++++++++ dlls/kernel32/kernel32.spec | 4 ++-- dlls/kernel32/tests/file.c | 15 +++++++++++++++ include/winbase.h | 13 +++++++++++++ 4 files changed, 55 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c index 3214d724cb..aa3eb34d38 100644 --- a/dlls/kernel32/file.c +++ b/dlls/kernel32/file.c @@ -2349,6 +2349,31 @@ BOOL WINAPI FindNextFileA( HANDLE handle, WIN32_FIND_DATAA *data ) }
+/************************************************************************** + * FindFirstStreamW (KERNEL32.@) + */ +HANDLE WINAPI FindFirstStreamW(LPCWSTR filename, STREAM_INFO_LEVELS infolevel, + void *data, DWORD flags) +{ + FIXME("(%s, %d, %p, %x): stub!\n", debugstr_w(filename), infolevel, data, flags); + + SetLastError(ERROR_HANDLE_EOF); + return INVALID_HANDLE_VALUE; +} + + +/************************************************************************** + * FindNextStreamW (KERNEL32.@) + */ +BOOL WINAPI FindNextStreamW(HANDLE handle, void *data) +{ + FIXME("(%p, %p): stub!\n", handle, data); + + SetLastError(ERROR_HANDLE_EOF); + return FALSE; +} + + /************************************************************************** * GetFileAttributesW (KERNEL32.@) */ diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 1cf7b58a02..776d83bc84 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -488,7 +488,7 @@ # @ stub FindFirstFileTransactedW @ stdcall FindFirstFileW(wstr ptr) # @ stub FindFirstStreamTransactedW -# @ stub FindFirstStreamW +@ stdcall FindFirstStreamW(wstr long ptr long) @ stdcall FindFirstVolumeA(ptr long) @ stdcall FindFirstVolumeMountPointA(str ptr long) @ stdcall FindFirstVolumeMountPointW(wstr ptr long) @@ -497,7 +497,7 @@ @ stdcall FindNextFileA(long ptr) # @ stub FindNextFileNameW @ stdcall FindNextFileW(long ptr) -# @ stub FindNextStreamW +@ stdcall FindNextStreamW(long ptr) @ stdcall FindNextVolumeA(long ptr long) @ stub FindNextVolumeMountPointA @ stub FindNextVolumeMountPointW diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c index 33b17aa327..adf849590e 100644 --- a/dlls/kernel32/tests/file.c +++ b/dlls/kernel32/tests/file.c @@ -5228,6 +5228,20 @@ static void test_overlapped_read(void) ok(ret, "Unexpected error %u.\n", GetLastError()); }
+static void test_find_file_stream(void) +{ + WCHAR path[] = {'C',':','\','w','i','n','d','o','w','s',0}; + HANDLE handle; + int error; + WIN32_FIND_STREAM_DATA data; + + SetLastError(0xdeadbeef); + handle = FindFirstStreamW(path, FindStreamInfoStandard, &data, 0); + error = GetLastError(); + ok(handle == INVALID_HANDLE_VALUE, "Expected INVALID_HANDLE_VALUE, got %x\n", handle); + ok(error == ERROR_HANDLE_EOF, "Expected ERROR_HANDLE_EOF, got %d\n", error); +} + START_TEST(file) { char temp_path[MAX_PATH]; @@ -5298,4 +5312,5 @@ START_TEST(file) test_GetFileAttributesExW(); test_post_completion(); test_overlapped_read(); + test_find_file_stream(); } diff --git a/include/winbase.h b/include/winbase.h index 49d0e7ed08..c2e216cb91 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -1717,6 +1717,17 @@ typedef struct _UMS_SCHEDULER_STARTUP_INFO typedef enum _RTL_UMS_SCHEDULER_REASON UMS_SCHEDULER_REASON; typedef enum _RTL_UMS_THREAD_INFO_CLASS UMS_THREAD_INFO_CLASS, *PUMS_THREAD_INFO_CLASS;
+typedef enum _STREAM_INFO_LEVELS +{ + FindStreamInfoStandard, + FindStreamInfoMaxInfoLevel +} STREAM_INFO_LEVELS; + +typedef struct _WIN32_FIND_STREAM_DATA { + LARGE_INTEGER StreamSize; + WCHAR cStreamName[MAX_PATH + 36]; +} WIN32_FIND_STREAM_DATA,*PWIN32_FIND_STREAM_DATA; + WINBASEAPI BOOL WINAPI ActivateActCtx(HANDLE,ULONG_PTR *); WINADVAPI BOOL WINAPI AddAccessAllowedAce(PACL,DWORD,DWORD,PSID); WINADVAPI BOOL WINAPI AddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID); @@ -2002,10 +2013,12 @@ WINBASEAPI HANDLE WINAPI FindFirstFileExA(LPCSTR,FINDEX_INFO_LEVELS,LPVOID, WINBASEAPI HANDLE WINAPI FindFirstFileExW(LPCWSTR,FINDEX_INFO_LEVELS,LPVOID,FINDEX_SEARCH_OPS,LPVOID,DWORD); #define FindFirstFileEx WINELIB_NAME_AW(FindFirstFileEx) WINADVAPI BOOL WINAPI FindFirstFreeAce(PACL,LPVOID*); +WINBASEAPI HANDLE WINAPI FindFirstStreamW(LPCWSTR,STREAM_INFO_LEVELS,void*,DWORD); WINBASEAPI BOOL WINAPI FindNextChangeNotification(HANDLE); WINBASEAPI BOOL WINAPI FindNextFileA(HANDLE,LPWIN32_FIND_DATAA); WINBASEAPI BOOL WINAPI FindNextFileW(HANDLE,LPWIN32_FIND_DATAW); #define FindNextFile WINELIB_NAME_AW(FindNextFile) +WINBASEAPI BOOL WINAPI FindNextStreamW(HANDLE,void*); WINBASEAPI BOOL WINAPI FindCloseChangeNotification(HANDLE); WINBASEAPI HRSRC WINAPI FindResourceA(HMODULE,LPCSTR,LPCSTR); WINBASEAPI HRSRC WINAPI FindResourceW(HMODULE,LPCWSTR,LPCWSTR); -- 2.21.0