From: Hermès Bélusca-Maïto Date: Sat, 22 Sep 2018 22:07:07 +0000 (+0200) Subject: [SHELL32] In _SHExpandEnvironmentStrings(), fall back to SHExpandEnvironmentStringsFo... X-Git-Tag: 0.4.12-dev~740 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=7ee298bbfc3838e7fbf92d775206ca9f4d0c38dc [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). --- 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__