Commit a5a2749c authored by Gijs Vermeulen's avatar Gijs Vermeulen Committed by Alexandre Julliard

shell32: Implement PathResolve.

parent b26f9d19
......@@ -684,27 +684,78 @@ BOOL WINAPI PathQualifyAW(LPCVOID pszPath)
return PathQualifyA(pszPath);
}
static BOOL PathResolveA(LPSTR path, LPCSTR *paths, DWORD flags)
BOOL WINAPI PathFindOnPathExA(LPSTR,LPCSTR *,DWORD);
BOOL WINAPI PathFindOnPathExW(LPWSTR,LPCWSTR *,DWORD);
BOOL WINAPI PathFileExistsDefExtA(LPSTR,DWORD);
BOOL WINAPI PathFileExistsDefExtW(LPWSTR,DWORD);
static BOOL PathResolveA(char *path, const char **dirs, DWORD flags)
{
FIXME("(%s,%p,0x%08x),stub!\n", debugstr_a(path), paths, flags);
return FALSE;
BOOL is_file_spec = PathIsFileSpecA(path);
DWORD dwWhich = flags & PRF_DONTFINDLNK ? 0xf : 0xff;
TRACE("(%s,%p,0x%08x)\n", debugstr_a(path), dirs, flags);
if (flags & PRF_VERIFYEXISTS && !PathFileExistsA(path))
{
if (PathFindOnPathExA(path, dirs, dwWhich))
return TRUE;
if (PathFileExistsDefExtA(path, dwWhich))
return TRUE;
if (!is_file_spec) GetFullPathNameA(path, MAX_PATH, path, NULL);
SetLastError(ERROR_FILE_NOT_FOUND);
return FALSE;
}
if (is_file_spec)
{
SetLastError(ERROR_FILE_NOT_FOUND);
return FALSE;
}
GetFullPathNameA(path, MAX_PATH, path, NULL);
return TRUE;
}
static BOOL PathResolveW(LPWSTR path, LPCWSTR *paths, DWORD flags)
static BOOL PathResolveW(WCHAR *path, const WCHAR **dirs, DWORD flags)
{
FIXME("(%s,%p,0x%08x),stub!\n", debugstr_w(path), paths, flags);
return FALSE;
BOOL is_file_spec = PathIsFileSpecW(path);
DWORD dwWhich = flags & PRF_DONTFINDLNK ? 0xf : 0xff;
TRACE("(%s,%p,0x%08x)\n", debugstr_w(path), dirs, flags);
if (flags & PRF_VERIFYEXISTS && !PathFileExistsW(path))
{
if (PathFindOnPathExW(path, dirs, dwWhich))
return TRUE;
if (PathFileExistsDefExtW(path, dwWhich))
return TRUE;
if (!is_file_spec) GetFullPathNameW(path, MAX_PATH, path, NULL);
SetLastError(ERROR_FILE_NOT_FOUND);
return FALSE;
}
if (is_file_spec)
{
SetLastError(ERROR_FILE_NOT_FOUND);
return FALSE;
}
GetFullPathNameW(path, MAX_PATH, path, NULL);
return TRUE;
}
/*************************************************************************
* PathResolve [SHELL32.51]
*/
BOOL WINAPI PathResolveAW(LPVOID path, LPCVOID *paths, DWORD flags)
BOOL WINAPI PathResolveAW(void *path, const void **paths, DWORD flags)
{
if (SHELL_OsIsUnicode())
return PathResolveW(path, (LPCWSTR*)paths, flags);
return PathResolveW(path, (const WCHAR **)paths, flags);
else
return PathResolveA(path, (LPCSTR*)paths, flags);
return PathResolveA(path, (const char **)paths, flags);
}
/*************************************************************************
......
......@@ -1752,10 +1752,9 @@ BOOL WINAPI WriteCabinetState(CABINETSTATE *);
/* PathResolve flags */
#define PRF_VERIFYEXISTS 0x01
#define PRF_EXECUTABLE 0x02
#define PRF_TRYPROGRAMEXTENSIONS 0x03
#define PRF_FIRSTDIRDEF 0x04
#define PRF_DONTFINDLINK 0x08
#define PRF_DONTFINDLNK 0x08
#define PRF_REQUIREABSOLUTE 0x10
VOID WINAPI PathGetShortPath(LPWSTR pszPath);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment