Index: modules/rostests/apitests/kernel32/CMakeLists.txt =================================================================== --- modules/rostests/apitests/kernel32/CMakeLists.txt (révision 57314) +++ modules/rostests/apitests/kernel32/CMakeLists.txt (copie de travail) @@ -2,6 +2,7 @@ add_definitions(-D_DLL -D__USE_CRTIMP) list(APPEND SOURCE + FindFiles.c GetCurrentDirectory.c GetDriveType.c GetModuleFileName.c Index: modules/rostests/apitests/kernel32/FindFiles.c =================================================================== --- modules/rostests/apitests/kernel32/FindFiles.c (révision 0) +++ modules/rostests/apitests/kernel32/FindFiles.c (copie de travail) @@ -0,0 +1,1153 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Tests for the Find*File*A/W APIs. + * PROGRAMMER: Hermès BÉLUSCA - MAĂŹTO + */ + +#include +#include + + +static CHAR OSDirA[MAX_PATH]; // OS directory +static WCHAR OSDirW[MAX_PATH]; +static CHAR baseA[MAX_PATH]; // Current directory +static WCHAR baseW[MAX_PATH]; +static CHAR selfnameA[MAX_PATH]; // Path to this executable +static WCHAR selfnameW[MAX_PATH]; +static LPSTR exenameA; // Executable's name +static LPWSTR exenameW; +static INT myARGC; +static LPSTR* myARGV; + + +static void Test_FindFirstFileA(void) +{ + CHAR CurrentDirectory[MAX_PATH]; + CHAR Buffer[MAX_PATH]; + WIN32_FIND_DATAA fd; + HANDLE h; + + /* Save the current directory */ + GetCurrentDirectoryA(sizeof(CurrentDirectory) / sizeof(CHAR), CurrentDirectory); + +/*** Tests for the root directory ***/ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + /* + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + */ + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_INVALID_NAME); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); +/************************************/ + +/*** Relative paths ***/ + /* + * NOTE: This test does not give the same results if you launch the app + * from a root drive or from a long-form directory (of the form C:\dir). + */ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA(".", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA(".\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA(".\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA(".\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + /* + * NOTE: This test does not give the same results if you launch the app + * from a root drive or from a long-form directory (of the form C:\dir). + */ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("..", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("..\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("..\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("..\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); +/**********************/ + +/*** Relative paths - root directory ***/ + /* Modify the current directory */ + SetCurrentDirectoryA("C:\\"); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA(".", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA(".\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA(".\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA(".\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("..", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("..\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("..\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("..\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + /* Restore the old current directory */ + SetCurrentDirectoryA(CurrentDirectory); +/***************************************/ + +/*** Relative paths - long directory ***/ + /* Modify the current directory */ + SetCurrentDirectoryA(OSDirA); /* We expect here that OSDir is of the form: C:\OSDir */ + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA(".", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + /* + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + */ + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA(".\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA(".\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA(".\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("..", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + /* + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + */ + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("..\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("..\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("..\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + /* Restore the old current directory */ + SetCurrentDirectoryA(CurrentDirectory); +/****************************************/ + +/*** Unexisting path ***/ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\foobar", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\foobar\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\foobar\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\foobar\\*", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\foobar\\system32\\..\\*", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + /* Possibly a DOS device */ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\foobar\\nul", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\foobar\\nul\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\foobar\\nul\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\foobar\\nul\\*", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\foobar\\toto", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\foobar\\toto\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\foobar\\toto\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileA("C:\\foobar\\toto\\*", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, "C:\\foobar\\"); + strcat(Buffer, exenameA); + h = FindFirstFileA(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, "C:\\foobar\\.\\"); + strcat(Buffer, exenameA); + h = FindFirstFileA(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); +/***********************/ + +/*** Existing path ***/ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + h = FindFirstFileA(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\"); + h = FindFirstFileA(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\\\"); + h = FindFirstFileA(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\*"); + h = FindFirstFileA(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\.\\*"); + h = FindFirstFileA(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\*"); + h = FindFirstFileA(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\system32\\..\\*"); + h = FindFirstFileA(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + /* Possibly a DOS device */ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\nul"); + h = FindFirstFileA(Buffer, &fd); + ok(h == (HANDLE)0x00000001, "FindFirstFileA returned 0x%p, expected 0x00000001\n", h); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\nul\\"); + h = FindFirstFileA(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\nul\\\\"); + h = FindFirstFileA(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\nul\\*"); + h = FindFirstFileA(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\toto"); + h = FindFirstFileA(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\toto\\"); + h = FindFirstFileA(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\toto\\\\"); + h = FindFirstFileA(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, OSDirA); + strcat(Buffer, "\\toto\\*"); + h = FindFirstFileA(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileA returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, baseA); + strcat(Buffer, "\\"); + strcat(Buffer, exenameA); + h = FindFirstFileA(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + strcpy(Buffer, baseA); + strcat(Buffer, "\\.\\"); + strcat(Buffer, exenameA); + h = FindFirstFileA(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileA returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); +/*********************/ + + return; +} + +static void Test_FindFirstFileW(void) +{ + WCHAR CurrentDirectory[MAX_PATH]; + WCHAR Buffer[MAX_PATH]; + WIN32_FIND_DATAW fd; + HANDLE h; + + /* Save the current directory */ + GetCurrentDirectoryW(sizeof(CurrentDirectory) / sizeof(WCHAR), CurrentDirectory); + +/*** Tests for the root directory ***/ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + /* + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + */ + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_INVALID_NAME); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); +/************************************/ + +/*** Relative paths ***/ + /* + * NOTE: This test does not give the same results if you launch the app + * from a root drive or from a long-form directory (of the form C:\dir). + */ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L".", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L".\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L".\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L".\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + /* + * NOTE: This test does not give the same results if you launch the app + * from a root drive or from a long-form directory (of the form C:\dir). + */ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"..", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"..\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"..\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"..\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); +/**********************/ + +/*** Relative paths - root directory ***/ + /* Modify the current directory */ + SetCurrentDirectoryW(L"C:\\"); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L".", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L".\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L".\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L".\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"..", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"..\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"..\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"..\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + /* Restore the old current directory */ + SetCurrentDirectoryW(CurrentDirectory); +/***************************************/ + +/*** Relative paths - long directory ***/ + /* Modify the current directory */ + SetCurrentDirectoryW(OSDirW); /* We expect here that OSDir is of the form: C:\OSDir */ + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L".", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + /* + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + */ + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L".\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L".\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L".\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"..", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + /* + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + */ + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"..\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"..\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"..\\*", &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + /* Restore the old current directory */ + SetCurrentDirectoryW(CurrentDirectory); +/****************************************/ + +/*** Unexisting path ***/ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\foobar", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\foobar\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\foobar\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\foobar\\*", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\foobar\\system32\\..\\*", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + /* Possibly a DOS device */ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\foobar\\nul", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\foobar\\nul\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\foobar\\nul\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\foobar\\nul\\*", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\foobar\\toto", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\foobar\\toto\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\foobar\\toto\\\\", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + h = FindFirstFileW(L"C:\\foobar\\toto\\*", &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, L"C:\\foobar\\"); + wcscat(Buffer, exenameW); + h = FindFirstFileW(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, L"C:\\foobar\\.\\"); + wcscat(Buffer, exenameW); + h = FindFirstFileW(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); +/***********************/ + +/*** Existing path ***/ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + h = FindFirstFileW(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\"); + h = FindFirstFileW(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\\\"); + h = FindFirstFileW(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\*"); + h = FindFirstFileW(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\.\\*"); + h = FindFirstFileW(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\*"); + h = FindFirstFileW(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\system32\\..\\*"); + h = FindFirstFileW(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + /* Possibly a DOS device */ + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\nul"); + h = FindFirstFileW(Buffer, &fd); + ok(h == (HANDLE)0x00000001, "FindFirstFileW returned 0x%p, expected 0x00000001\n", h); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\nul\\"); + h = FindFirstFileW(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\nul\\\\"); + h = FindFirstFileW(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\nul\\*"); + h = FindFirstFileW(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\toto"); + h = FindFirstFileW(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_FILE_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\toto\\"); + h = FindFirstFileW(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\toto\\\\"); + h = FindFirstFileW(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, OSDirW); + wcscat(Buffer, L"\\toto\\*"); + h = FindFirstFileW(Buffer, &fd); + ok(h == INVALID_HANDLE_VALUE, "FindFirstFileW returned 0x%p, expected INVALID_HANDLE_VALUE\n", h); + ok_err(ERROR_PATH_NOT_FOUND); + ok(fd.cFileName[0] == 0, "fd.cFileName != \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, baseW); + wcscat(Buffer, L"\\"); + wcscat(Buffer, exenameW); + h = FindFirstFileW(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); + + ZeroMemory(&fd, sizeof(fd)); SetLastError(0xdeadbeef); + wcscpy(Buffer, baseW); + wcscat(Buffer, L"\\.\\"); + wcscat(Buffer, exenameW); + h = FindFirstFileW(Buffer, &fd); + ok(h != INVALID_HANDLE_VALUE, "FindFirstFileW returned INVALID_HANDLE_VALUE\n"); + ok_err(0xdeadbeef); + ok(fd.cFileName[0] != 0, "fd.cFileName == \"\"\n"); + FindClose(h); +/*********************/ + + return; +} + + +static int init(void) +{ + LPSTR p; + size_t i; + + myARGC = winetest_get_mainargs(&myARGV); + if (!GetCurrentDirectoryA(sizeof(baseA)/sizeof(baseA[0]), baseA)) return 0; + strcpy(selfnameA, myARGV[0]); + + /* Strip the path of selfname */ + if ((p = strrchr(selfnameA, '\\')) != NULL) + exenameA = p + 1; + else + exenameA = selfnameA; + + if ((p = strrchr(exenameA, '/')) != NULL) + exenameA = p + 1; + + if (!GetWindowsDirectoryA(OSDirA, sizeof(OSDirA)/sizeof(OSDirA[0]))) return 0; + + /* Conversion ANSI --> UNICODE without the Win32 APIs */ + for (i = 0 ; i <= strlen(baseA) ; ++i) + { + baseW[i] = (WCHAR)baseA[i]; + } + for (i = 0 ; i <= strlen(selfnameA) ; ++i) + { + selfnameW[i] = (WCHAR)selfnameA[i]; + } + exenameW = selfnameW + (exenameA - selfnameA); + for (i = 0 ; i <= strlen(OSDirA) ; ++i) + { + OSDirW[i] = (WCHAR)OSDirA[i]; + } + + return 1; +} + +START_TEST(FindFiles) +{ + int b = init(); + ok(b, "Basic init of FindFiles test\n"); + if (!b) return; + + Test_FindFirstFileA(); + Test_FindFirstFileW(); +} Index: modules/rostests/apitests/kernel32/testlist.c =================================================================== --- modules/rostests/apitests/kernel32/testlist.c (révision 57314) +++ modules/rostests/apitests/kernel32/testlist.c (copie de travail) @@ -5,6 +5,7 @@ #define STANDALONE #include "wine/test.h" +extern void func_FindFiles(void); extern void func_GetCurrentDirectory(void); extern void func_GetDriveType(void); extern void func_GetModuleFileName(void); @@ -14,6 +15,7 @@ const struct test winetest_testlist[] = { + { "FindFiles", func_FindFiles }, { "GetCurrentDirectory", func_GetCurrentDirectory }, { "GetDriveType", func_GetDriveType }, { "GetModuleFileName", func_GetModuleFileName },