[SHELL32] In _SHExpandEnvironmentStrings(), fall back to SHExpandEnvironmentStringsFo...
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 22 Sep 2018 22:07:07 +0000 (00:07 +0200)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 22 Sep 2018 22:18:57 +0000 (00:18 +0200)
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

index 96e47b2..b247fd3 100644 (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__