[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).
This commit is contained in:
Hermès Bélusca-Maïto 2018-09-23 00:07:07 +02:00
parent e29609147b
commit 7ee298bbfc
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0

View file

@ -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__