https://git.reactos.org/?p=reactos.git;a=commitdiff;h=017004a0ac98cfd15cb12c...
commit 017004a0ac98cfd15cb12c129a9a340a3b1cefb8 Author: Stanislav Motylkov x86corez@gmail.com AuthorDate: Sun Aug 27 00:48:26 2023 +0300 Commit: Stanislav Motylkov x86corez@gmail.com CommitDate: Sun Aug 27 00:48:26 2023 +0300
[KERNEL32_APITEST] FindFiles: Add tests for *Ex functions
Shows that `lpSearchFilter` pointer is being ignored on Windows. This is for @RatinCN's PR #5592. --- modules/rostests/apitests/kernel32/FindFiles.c | 67 ++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 5 deletions(-)
diff --git a/modules/rostests/apitests/kernel32/FindFiles.c b/modules/rostests/apitests/kernel32/FindFiles.c index a927d0c5929..7507915a577 100644 --- a/modules/rostests/apitests/kernel32/FindFiles.c +++ b/modules/rostests/apitests/kernel32/FindFiles.c @@ -95,6 +95,28 @@ do { \ FindClose(h); \ } while (0)
+#define testType3_A(lpFileName, fInfoLevelId, fSearchOp, lpSearchFilter, dwAdditionalFlags, dwInitialError, hUnexpectedHandleValue, dwExpectedError) \ +do { \ + ZeroMemory(&fd, sizeof(fd)); \ + SetLastError((dwInitialError)); \ + h = FindFirstFileExA((lpFileName), (fInfoLevelId), &fd, (fSearchOp), (lpSearchFilter), (dwAdditionalFlags)); \ + ok(h != (hUnexpectedHandleValue), "FindFirstFileExA returned 0x%p\n", h); \ + ok_err(dwExpectedError); \ + ok(fd.cFileName[0] != 0, "fd.cFileName == ""\n"); \ + FindClose(h); \ +} while (0) + +#define testType3_W(lpFileName, fInfoLevelId, fSearchOp, lpSearchFilter, dwAdditionalFlags, dwInitialError, hUnexpectedHandleValue, dwExpectedError) \ +do { \ + ZeroMemory(&fd, sizeof(fd)); \ + SetLastError((dwInitialError)); \ + h = FindFirstFileExW((lpFileName), (fInfoLevelId), &fd, (fSearchOp), (lpSearchFilter), (dwAdditionalFlags)); \ + ok(h != (hUnexpectedHandleValue), "FindFirstFileExW returned 0x%p\n", h); \ + ok_err(dwExpectedError); \ + ok(fd.cFileName[0] != 0, "fd.cFileName == ""\n"); \ + FindClose(h); \ +} while (0) +
static void Test_FindFirstFileA(void) { @@ -104,7 +126,7 @@ static void Test_FindFirstFileA(void) HANDLE h;
/* Save the current directory */ - GetCurrentDirectoryA(sizeof(CurrentDirectory) / sizeof(CHAR), CurrentDirectory); + GetCurrentDirectoryA(_countof(CurrentDirectory), CurrentDirectory);
/*** Tests for the root directory - root directory ***/ /* Modify the current directory */ @@ -295,7 +317,7 @@ static void Test_FindFirstFileW(void) HANDLE h;
/* Save the current directory */ - GetCurrentDirectoryW(sizeof(CurrentDirectory) / sizeof(WCHAR), CurrentDirectory); + GetCurrentDirectoryW(_countof(CurrentDirectory), CurrentDirectory);
/*** Tests for the root directory - root directory ***/ /* Modify the current directory */ @@ -478,6 +500,39 @@ static void Test_FindFirstFileW(void) return; }
+static void Test_FindFirstFileExA(void) +{ + CHAR CurrentDirectory[MAX_PATH]; + WIN32_FIND_DATAA fd; + HANDLE h; + + /* Save the current directory */ + GetCurrentDirectoryA(_countof(CurrentDirectory), CurrentDirectory); + SetCurrentDirectoryA(OSDirA); /* We expect here that OSDir is of the form: C:\OSDir */ + + testType3_A(".", FindExInfoStandard, FindExSearchNameMatch, NULL, 0, 0xdeadbeef, INVALID_HANDLE_VALUE, 0xdeadbeef); + testType3_A(".", FindExInfoStandard, FindExSearchNameMatch, "XXX", 0, 0xdeadbeef, INVALID_HANDLE_VALUE, 0xdeadbeef); + + /* Restore the old current directory */ + SetCurrentDirectoryA(CurrentDirectory); +} + +static void Test_FindFirstFileExW(void) +{ + WCHAR CurrentDirectory[MAX_PATH]; + WIN32_FIND_DATAW fd; + HANDLE h; + + /* Save the current directory */ + GetCurrentDirectoryW(_countof(CurrentDirectory), CurrentDirectory); + SetCurrentDirectoryW(OSDirW); /* We expect here that OSDir is of the form: C:\OSDir */ + + testType3_W(L".", FindExInfoStandard, FindExSearchNameMatch, NULL, 0, 0xdeadbeef, INVALID_HANDLE_VALUE, 0xdeadbeef); + testType3_W(L".", FindExInfoStandard, FindExSearchNameMatch, L"XXX", 0, 0xdeadbeef, INVALID_HANDLE_VALUE, 0xdeadbeef); + + /* Restore the old current directory */ + SetCurrentDirectoryW(CurrentDirectory); +}
static int init(void) { @@ -485,7 +540,7 @@ static int init(void) size_t i;
myARGC = winetest_get_mainargs(&myARGV); - if (!GetCurrentDirectoryA(sizeof(baseA)/sizeof(baseA[0]), baseA)) return 0; + if (!GetCurrentDirectoryA(_countof(baseA), baseA)) return 0; strcpy(selfnameA, myARGV[0]);
/* Strip the path of selfname */ @@ -497,7 +552,7 @@ static int init(void) if ((p = strrchr(exenameA, '/')) != NULL) exenameA = p + 1;
- if (!GetWindowsDirectoryA(OSDirA, sizeof(OSDirA)/sizeof(OSDirA[0]))) return 0; + if (!GetWindowsDirectoryA(OSDirA, _countof(OSDirA))) return 0;
/* Quick-and-dirty conversion ANSI --> UNICODE without the Win32 APIs */ for (i = 0 ; i <= strlen(baseA) ; ++i) @@ -519,10 +574,12 @@ static int init(void)
START_TEST(FindFiles) { - int b = init(); + int b = init(); ok(b, "Basic init of FindFiles test\n"); if (!b) return;
Test_FindFirstFileA(); Test_FindFirstFileW(); + Test_FindFirstFileExA(); + Test_FindFirstFileExW(); }