From 7ee298bbfc3838e7fbf92d775206ca9f4d0c38dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 23 Sep 2018 00:07:07 +0200 Subject: [PATCH] [SHELL32] In _SHExpandEnvironmentStrings(), fall back to SHExpandEnvironmentStringsForUserW() if the simplified code paths failed. This allows the code to give a last chance for expanding the string. And if it still fails, we bail out as expected and the caller will take appropriate actions. As a by-product, this commit (together with the previous one e2960914) fixes the regression CORE-14981 (Quick-Launch bar couldn't be opened in LiveCD). --- dll/win32/shell32/wine/shellpath.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/dll/win32/shell32/wine/shellpath.c b/dll/win32/shell32/wine/shellpath.c index 96e47b288a7..b247fd3bf3e 100644 --- a/dll/win32/shell32/wine/shellpath.c +++ b/dll/win32/shell32/wine/shellpath.c @@ -1986,7 +1986,7 @@ static HRESULT _SHExpandEnvironmentStrings(HANDLE hToken, LPCWSTR szSrc, LPWSTR #else DWORD cchSize = cchDest; if (!GetAllUsersProfileDirectoryW(szDest, &cchSize)) - return HRESULT_FROM_WIN32(GetLastError()); + goto fallback_expand; #endif PathAppendW(szDest, szTemp + strlenW(AllUsersProfileW)); } @@ -2015,7 +2015,7 @@ static HRESULT _SHExpandEnvironmentStrings(HANDLE hToken, LPCWSTR szSrc, LPWSTR #else DWORD cchSize = cchDest; if (!_SHGetUserProfileDirectoryW(hToken, szDest, &cchSize)) - return HRESULT_FROM_WIN32(GetLastError()); + goto fallback_expand; #endif PathAppendW(szDest, szTemp + strlenW(UserProfileW)); } @@ -2025,16 +2025,19 @@ static HRESULT _SHExpandEnvironmentStrings(HANDLE hToken, LPCWSTR szSrc, LPWSTR GetSystemDirectoryW(szDest, MAX_PATH); #else if (!GetSystemDirectoryW(szDest, cchDest)) - return HRESULT_FROM_WIN32(GetLastError()); + goto fallback_expand; #endif strcpyW(szDest + 3, szTemp + strlenW(SystemDriveW) + 1); } else +#ifdef __REACTOS__ +fallback_expand: +#endif { #ifndef __REACTOS__ DWORD ret = ExpandEnvironmentStringsW(szTemp, szDest, MAX_PATH); #else - DWORD ret = SHExpandEnvironmentStringsForUserW(hToken, szSrc, szDest, cchDest); + DWORD ret = SHExpandEnvironmentStringsForUserW(hToken, szTemp, szDest, cchDest); #endif #ifndef __REACTOS__