forked from Mirrors/wine-wine
shell32: Implement PathResolve.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48082
Signed-off-by: Gijs Vermeulen <gijsvrm@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a5a2749cfe
)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
oldstable
parent
bc846f4b8d
commit
2d6f581595
|
@ -684,27 +684,78 @@ BOOL WINAPI PathQualifyAW(LPCVOID pszPath)
|
||||||
return PathQualifyA(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);
|
BOOL is_file_spec = PathIsFileSpecA(path);
|
||||||
return FALSE;
|
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);
|
BOOL is_file_spec = PathIsFileSpecW(path);
|
||||||
return FALSE;
|
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]
|
* 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())
|
if (SHELL_OsIsUnicode())
|
||||||
return PathResolveW(path, (LPCWSTR*)paths, flags);
|
return PathResolveW(path, (const WCHAR **)paths, flags);
|
||||||
else
|
else
|
||||||
return PathResolveA(path, (LPCSTR*)paths, flags);
|
return PathResolveA(path, (const char **)paths, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
|
|
@ -1717,10 +1717,9 @@ BOOL WINAPI WriteCabinetState(CABINETSTATE *);
|
||||||
|
|
||||||
/* PathResolve flags */
|
/* PathResolve flags */
|
||||||
#define PRF_VERIFYEXISTS 0x01
|
#define PRF_VERIFYEXISTS 0x01
|
||||||
#define PRF_EXECUTABLE 0x02
|
|
||||||
#define PRF_TRYPROGRAMEXTENSIONS 0x03
|
#define PRF_TRYPROGRAMEXTENSIONS 0x03
|
||||||
#define PRF_FIRSTDIRDEF 0x04
|
#define PRF_FIRSTDIRDEF 0x04
|
||||||
#define PRF_DONTFINDLINK 0x08
|
#define PRF_DONTFINDLNK 0x08
|
||||||
#define PRF_REQUIREABSOLUTE 0x10
|
#define PRF_REQUIREABSOLUTE 0x10
|
||||||
|
|
||||||
VOID WINAPI PathGetShortPath(LPWSTR pszPath);
|
VOID WINAPI PathGetShortPath(LPWSTR pszPath);
|
||||||
|
|
Loading…
Reference in New Issue