/************************************************************************* * VerFindFile [VER.8] */ DWORD WINAPI VerFindFile16( UINT16 flags, LPCSTR lpszFilename, LPCSTR lpszWinDir, LPCSTR lpszAppDir, LPSTR lpszCurDir, UINT16 *lpuCurDirLen, LPSTR lpszDestDir, UINT16 *lpuDestDirLen ) { UINT curDirLen, destDirLen; DWORD retv = VerFindFileA( flags, lpszFilename, lpszWinDir, lpszAppDir, lpszCurDir, &curDirLen, lpszDestDir, &destDirLen ); *lpuCurDirLen = (UINT16)curDirLen; *lpuDestDirLen = (UINT16)destDirLen; return retv; }
static void test_find_file(void) { DWORD ret; UINT dwCur, dwOut ; char appdir[MAX_PATH]; char curdir[MAX_PATH]; char filename[MAX_PATH]; char outBuf[MAX_PATH]; char windir[MAX_PATH]; static CHAR empty[] = "", regedit[] = "regedit", regedit_exe[] = "regedit.exe"; memset(appdir, 0, MAX_PATH); memset(windir, 0, MAX_PATH); dwCur=MAX_PATH; dwOut=MAX_PATH; memset(curdir, 0, MAX_PATH); memset(outBuf, 0, MAX_PATH); ret = VerFindFileA(0, regedit, empty, empty, curdir, &dwCur, outBuf, &dwOut); switch(ret) { case 0L: ok(dwCur == 1, "Wrong length of buffer for current location: " "got %d(%s) expected 1\n", dwCur, curdir); ok(dwOut == 1, "Wrong length of buffer for the recommended installation location: " "got %d(%s) expected 1\n", dwOut, outBuf); break; case VFF_BUFFTOOSMALL: ok(dwCur == MAX_PATH, "Wrong length of buffer for current location: " "got %d(%s) expected MAX_PATH\n", dwCur, curdir); ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location: " "got %d(%s) expected MAX_PATH\n", dwOut, outBuf); break; default: ok(0, "Got unexpected return value %x\n", ret); } if(!GetWindowsDirectoryA(windir, MAX_PATH)) trace("GetWindowsDirectoryA failed\n"); else { sprintf(appdir, "%s\\regedit.exe", windir); if(INVALID_FILE_ATTRIBUTES == GetFileAttributesA(appdir)) trace("GetFileAttributesA(%s) failed\n", appdir); else { dwCur=MAX_PATH; dwOut=MAX_PATH; memset(curdir, 0, MAX_PATH); memset(outBuf, 0, MAX_PATH); ret = VerFindFileA(0, regedit_exe, empty, empty, curdir, &dwCur, outBuf, &dwOut); switch(ret) { case VFF_CURNEDEST: ok(dwCur == 1 + strlen(windir), "Wrong length of buffer for current location: " "got %d(%s) expected %d\n", dwCur, curdir, lstrlenA(windir)+1); ok(dwOut == 1, "Wrong length of buffer for the recommended installation location: " "got %d(%s) expected 1\n", dwOut, outBuf); break; case VFF_BUFFTOOSMALL: ok(dwCur == MAX_PATH, "Wrong length of buffer for current location: " "got %d(%s) expected MAX_PATH\n", dwCur, curdir); ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location: " "got %d(%s) expected MAX_PATH\n", dwOut, outBuf); break; default: todo_wine ok(0, "Got unexpected return value %x\n", ret); } dwCur=MAX_PATH; dwOut=MAX_PATH; memset(curdir, 0, MAX_PATH); memset(outBuf, 0, MAX_PATH); ret = VerFindFileA(0, regedit_exe, NULL, NULL, curdir, &dwCur, outBuf, &dwOut); switch(ret) { case VFF_CURNEDEST: ok(dwCur == 1 + strlen(windir), "Wrong length of buffer for current location: " "got %d(%s) expected %d\n", dwCur, curdir, lstrlenA(windir)+1); ok(dwOut == 1, "Wrong length of buffer for the recommended installation location: " "got %d(%s) expected 1\n", dwOut, outBuf); break; case VFF_BUFFTOOSMALL: ok(dwCur == MAX_PATH, "Wrong length of buffer for current location: " "got %d(%s) expected MAX_PATH\n", dwCur, curdir); ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location: " "got %d(%s) expected MAX_PATH\n", dwOut, outBuf); break; default: todo_wine ok(0, "Got unexpected return value %x\n", ret); } } } if(!GetModuleFileNameA(NULL, filename, MAX_PATH) || !GetSystemDirectoryA(windir, MAX_PATH) || !GetTempPathA(MAX_PATH, appdir)) trace("GetModuleFileNameA, GetSystemDirectoryA or GetTempPathA failed\n"); else { char *p = strrchr(filename, '\\'); if(p) { *(p++) ='\0'; SetCurrentDirectoryA(filename); memmove(filename, p, 1 + strlen(p)); } dwCur=MAX_PATH; dwOut=MAX_PATH; memset(outBuf, 0, MAX_PATH); memset(curdir, 0, MAX_PATH); ret = VerFindFileA(0, filename, NULL, NULL, curdir, &dwCur, outBuf, &dwOut); switch(ret) { case VFF_CURNEDEST: ok(dwOut == 1, "Wrong length of buffer for the recommended installation location" "got %d(%s) expected 1\n", dwOut, outBuf); break; case VFF_BUFFTOOSMALL: ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location" "got %d(%s) expected MAX_PATH\n", dwOut, outBuf); break; default: todo_wine ok(0, "Got unexpected return value %x\n", ret); } dwCur=MAX_PATH; dwOut=MAX_PATH; memset(outBuf, 0, MAX_PATH); memset(curdir, 0, MAX_PATH); ret = VerFindFileA(VFFF_ISSHAREDFILE, filename, NULL, appdir, curdir, &dwCur, outBuf, &dwOut); todo_wine ok(VFF_CURNEDEST == ret, "Wrong return value got %x expected VFF_CURNEDEST\n", ret); ok(dwOut == 1 + strlen(windir), "Wrong length of buffer for current location: " "got %d(%s) expected %d\n", dwOut, outBuf, lstrlenA(windir)+1); dwCur=MAX_PATH; dwOut=MAX_PATH; memset(outBuf, 0, MAX_PATH); memset(curdir, 0, MAX_PATH); ret = VerFindFileA(0, filename, NULL, appdir, curdir, &dwCur, outBuf, &dwOut); todo_wine ok(VFF_CURNEDEST == ret, "Wrong return value got %x expected VFF_CURNEDEST\n", ret); ok(dwOut == 1 + strlen(appdir), "Wrong length of buffer for current location: " "got %d(%s) expected %d\n", dwOut, outBuf, lstrlenA(appdir)+1); } }
static void test_find_file(void) { DWORD ret; UINT dwCur, dwOut ; char tmp[MAX_PATH]; char appdir[MAX_PATH]; char curdir[MAX_PATH]; char filename[MAX_PATH]; char outBuf[MAX_PATH]; char windir[MAX_PATH]; static const char empty[] = "", regedit[] = "regedit", regedit_exe[] = "regedit.exe"; memset(appdir, 0, MAX_PATH); memset(windir, 0, MAX_PATH); dwCur=MAX_PATH; dwOut=MAX_PATH; memset(curdir, 0, MAX_PATH); memset(outBuf, 0, MAX_PATH); ret = VerFindFileA(0, regedit, empty, empty, curdir, &dwCur, outBuf, &dwOut); switch(ret) { case 0L: ok(dwCur == 1, "Wrong length of buffer for current location: " "got %d(%s) expected 1\n", dwCur, curdir); ok(dwOut == 1, "Wrong length of buffer for the recommended installation location: " "got %d(%s) expected 1\n", dwOut, outBuf); break; case VFF_BUFFTOOSMALL: ok(dwCur == MAX_PATH, "Wrong length of buffer for current location: " "got %d(%s) expected MAX_PATH\n", dwCur, curdir); ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location: " "got %d(%s) expected MAX_PATH\n", dwOut, outBuf); break; default: ok(0, "Got unexpected return value %x\n", ret); } if(!GetWindowsDirectoryA(windir, MAX_PATH)) trace("GetWindowsDirectoryA failed\n"); else { sprintf(appdir, "%s\\regedit.exe", windir); if(INVALID_FILE_ATTRIBUTES == GetFileAttributesA(appdir)) trace("GetFileAttributesA(%s) failed\n", appdir); else { dwCur=MAX_PATH; dwOut=MAX_PATH; memset(curdir, 0, MAX_PATH); memset(outBuf, 0, MAX_PATH); ret = VerFindFileA(0, regedit_exe, empty, empty, curdir, &dwCur, outBuf, &dwOut); switch(ret) { case VFF_CURNEDEST: ok(dwCur == 1 + strlen(windir), "Wrong length of buffer for current location: " "got %d(%s) expected %d\n", dwCur, curdir, lstrlenA(windir)+1); ok(dwOut == 1, "Wrong length of buffer for the recommended installation location: " "got %d(%s) expected 1\n", dwOut, outBuf); break; case VFF_BUFFTOOSMALL: ok(dwCur == MAX_PATH, "Wrong length of buffer for current location: " "got %d(%s) expected MAX_PATH\n", dwCur, curdir); ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location: " "got %d(%s) expected MAX_PATH\n", dwOut, outBuf); break; default: ok(0, "Got unexpected return value %x\n", ret); } dwCur=MAX_PATH; dwOut=MAX_PATH; memset(curdir, 0, MAX_PATH); memset(outBuf, 0, MAX_PATH); ret = VerFindFileA(0, regedit_exe, NULL, NULL, curdir, &dwCur, outBuf, &dwOut); switch(ret) { case VFF_CURNEDEST: ok(dwCur == 1 + strlen(windir), "Wrong length of buffer for current location: " "got %d(%s) expected %d\n", dwCur, curdir, lstrlenA(windir)+1); ok(dwOut == 1, "Wrong length of buffer for the recommended installation location: " "got %d(%s) expected 1\n", dwOut, outBuf); break; case VFF_BUFFTOOSMALL: ok(dwCur == MAX_PATH, "Wrong length of buffer for current location: " "got %d(%s) expected MAX_PATH\n", dwCur, curdir); ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location: " "got %d(%s) expected MAX_PATH\n", dwOut, outBuf); break; default: ok(0, "Got unexpected return value %x\n", ret); } } } if(!GetSystemDirectoryA(windir, MAX_PATH) || !SHGetSpecialFolderPathA(0, appdir, CSIDL_PROGRAM_FILES, FALSE) || !GetTempPathA(MAX_PATH, tmp) || !GetTempFileNameA(tmp, "tes", 0, filename)) ok(0, "GetSystemDirectoryA, SHGetSpecialFolderPathA, GetTempPathA or GetTempFileNameA failed\n"); else { char *p = strrchr(filename, '\\'); if(p) { *(p++) ='\0'; SetCurrentDirectoryA(filename); memmove(filename, p, 1 + strlen(p)); } dwCur=MAX_PATH; dwOut=MAX_PATH; memset(outBuf, 0, MAX_PATH); memset(curdir, 0, MAX_PATH); ret = VerFindFileA(0, filename, NULL, NULL, curdir, &dwCur, outBuf, &dwOut); switch(ret) { case VFF_CURNEDEST: ok(dwOut == 1, "Wrong length of buffer for the recommended installation location" "got %d(%s) expected 1\n", dwOut, outBuf); break; case VFF_BUFFTOOSMALL: ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location" "got %d(%s) expected MAX_PATH\n", dwOut, outBuf); break; default: todo_wine ok(0, "Got unexpected return value %x\n", ret); } dwCur=MAX_PATH; dwOut=MAX_PATH; memset(outBuf, 0, MAX_PATH); memset(curdir, 0, MAX_PATH); ret = VerFindFileA(VFFF_ISSHAREDFILE, filename, NULL, appdir, curdir, &dwCur, outBuf, &dwOut); ok(VFF_CURNEDEST == ret, "Wrong return value got %x expected VFF_CURNEDEST\n", ret); ok(dwOut == 1 + strlen(windir), "Wrong length of buffer for current location: " "got %d(%s) expected %d\n", dwOut, outBuf, lstrlenA(windir)+1); dwCur=MAX_PATH; dwOut=MAX_PATH; memset(outBuf, 0, MAX_PATH); memset(curdir, 0, MAX_PATH); ret = VerFindFileA(0, filename, NULL, appdir, curdir, &dwCur, outBuf, &dwOut); ok(VFF_CURNEDEST == ret, "Wrong return value got %x expected VFF_CURNEDEST\n", ret); ok(dwOut == 1 + strlen(appdir), "Wrong length of buffer for current location: " "got %d(%s) expected %d\n", dwOut, outBuf, lstrlenA(appdir)+1); /* search for filename */ dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(0, filename, NULL, NULL, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(0, filename, NULL, empty, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(0, filename, NULL, appdir, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(VFFF_ISSHAREDFILE, filename, NULL, NULL, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(VFFF_ISSHAREDFILE, filename, NULL, empty, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(VFFF_ISSHAREDFILE, filename, NULL, appdir, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); /* search for regedit */ dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(0, "regedit", NULL, NULL, curdir, &dwCur, outBuf, &dwOut); ok(!ret, "Wrong return value got %x expected 0\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(0, "regedit", NULL, empty, curdir, &dwCur, outBuf, &dwOut); ok(!ret, "Wrong return value got %x expected 0\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(0, "regedit", NULL, appdir, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(VFFF_ISSHAREDFILE, "regedit", NULL, NULL, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(VFFF_ISSHAREDFILE, "regedit", NULL, empty, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(VFFF_ISSHAREDFILE, "regedit", NULL, appdir, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); /* search for regedit.exe */ dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(0, "regedit.exe", NULL, NULL, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(0, "regedit.exe", NULL, empty, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(0, "regedit.exe", NULL, appdir, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(VFFF_ISSHAREDFILE, "regedit.exe", NULL, NULL, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(VFFF_ISSHAREDFILE, "regedit.exe", NULL, empty, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(VFFF_ISSHAREDFILE, "regedit.exe", NULL, appdir, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); /* nonexistent filename */ dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(0, "doesnotexist.exe", NULL, NULL, curdir, &dwCur, outBuf, &dwOut); ok(!ret, "Wrong return value got %x expected 0\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(0, "doesnotexist.exe", NULL, empty, curdir, &dwCur, outBuf, &dwOut); ok(!ret, "Wrong return value got %x expected 0\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(0, "doesnotexist.exe", NULL, appdir, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(0, "doesnotexist.exe", NULL, "C:\\random_path_does_not_exist", curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(VFFF_ISSHAREDFILE, "doesnotexist.exe", NULL, NULL, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(VFFF_ISSHAREDFILE, "doesnotexist.exe", NULL, empty, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(VFFF_ISSHAREDFILE, "doesnotexist.exe", NULL, appdir, curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); dwCur=MAX_PATH; dwOut=MAX_PATH; ret = VerFindFileA(VFFF_ISSHAREDFILE, "doesnotexist.exe", NULL, "C:\\random_path_does_not_exist", curdir, &dwCur, outBuf, &dwOut); ok(ret & VFF_CURNEDEST, "Wrong return value got %x expected VFF_CURNEDEST set\n", ret); DeleteFileA(filename); } }