https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7ee298bbfc3838e7fbf92d775206ca9f4d0c38dc

commit 7ee298bbfc3838e7fbf92d775206ca9f4d0c38dc
Author:     Hermès Bélusca-Maïto <[email protected]>
AuthorDate: Sun Sep 23 00:07:07 2018 +0200
Commit:     Hermès Bélusca-Maïto <[email protected]>
CommitDate: Sun Sep 23 00:18:57 2018 +0200

    [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 96e47b288a..b247fd3bf3 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__

Reply via email to