From ad14fb5ef9fae9a0c6cb3aeb8cbecb26a91e14e0 Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Thu, 28 Jul 2016 15:24:44 +0000 Subject: [PATCH] [SHELL32] apply similar fixes to SetWorkingDirectory, SetArguments, SetIconLocation and SetRelativePath svn path=/trunk/; revision=72034 --- reactos/dll/win32/shell32/CShellLink.cpp | 66 ++++++++++++++++-------- 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/reactos/dll/win32/shell32/CShellLink.cpp b/reactos/dll/win32/shell32/CShellLink.cpp index 8b5bb30182c..ffe4b89e982 100644 --- a/reactos/dll/win32/shell32/CShellLink.cpp +++ b/reactos/dll/win32/shell32/CShellLink.cpp @@ -1342,7 +1342,8 @@ HRESULT WINAPI CShellLink::SetDescription(LPCWSTR pszName) wcscpy(sDescription, pszName); } else - sDescription = NULL; + sDescription = NULL; + bDirty = TRUE; return S_OK; @@ -1365,11 +1366,17 @@ HRESULT WINAPI CShellLink::SetWorkingDirectory(LPCWSTR pszDir) TRACE("(%p)->(dir=%s)\n", this, debugstr_w(pszDir)); HeapFree(GetProcessHeap(), 0, sWorkDir); - sWorkDir = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, - (wcslen(pszDir) + 1) * sizeof (WCHAR)); - if (!sWorkDir) - return E_OUTOFMEMORY; - wcscpy(sWorkDir, pszDir); + if (pszDir) + { + sWorkDir = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, + (wcslen(pszDir) + 1) * sizeof (WCHAR)); + if (!sWorkDir) + return E_OUTOFMEMORY; + wcscpy(sWorkDir, pszDir); + } + else + sWorkDir = NULL; + bDirty = TRUE; return S_OK; @@ -1392,12 +1399,18 @@ HRESULT WINAPI CShellLink::SetArguments(LPCWSTR pszArgs) TRACE("(%p)->(args=%s)\n", this, debugstr_w(pszArgs)); HeapFree(GetProcessHeap(), 0, sArgs); - sArgs = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, - (wcslen(pszArgs) + 1) * sizeof (WCHAR)); - if (!sArgs) - return E_OUTOFMEMORY; + if (pszArgs) + { + sArgs = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, + (wcslen(pszArgs) + 1) * sizeof (WCHAR)); + if (!sArgs) + return E_OUTOFMEMORY; + + wcscpy(sArgs, pszArgs); + } + else + sArgs = NULL; - wcscpy(sArgs, pszArgs); bDirty = TRUE; return S_OK; @@ -1478,11 +1491,16 @@ HRESULT WINAPI CShellLink::SetIconLocation(LPCWSTR pszIconPath, INT iIcon) TRACE("(%p)->(path=%s iicon=%u)\n", this, debugstr_w(pszIconPath), iIcon); HeapFree(GetProcessHeap(), 0, sIcoPath); - sIcoPath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, - (wcslen(pszIconPath) + 1) * sizeof (WCHAR)); - if (!sIcoPath) - return E_OUTOFMEMORY; - wcscpy(sIcoPath, pszIconPath); + if (pszIconPath) + { + sIcoPath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, + (wcslen(pszIconPath) + 1) * sizeof (WCHAR)); + if (!sIcoPath) + return E_OUTOFMEMORY; + wcscpy(sIcoPath, pszIconPath); + } + else + sIcoPath = NULL; iIcoNdx = iIcon; bDirty = TRUE; @@ -1495,11 +1513,17 @@ HRESULT WINAPI CShellLink::SetRelativePath(LPCWSTR pszPathRel, DWORD dwReserved) TRACE("(%p)->(path=%s %x)\n", this, debugstr_w(pszPathRel), dwReserved); HeapFree(GetProcessHeap(), 0, sPathRel); - sPathRel = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, - (wcslen(pszPathRel) + 1) * sizeof (WCHAR)); - if (!sPathRel) - return E_OUTOFMEMORY; - wcscpy(sPathRel, pszPathRel); + if (pszPathRel) + { + sPathRel = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, + (wcslen(pszPathRel) + 1) * sizeof (WCHAR)); + if (!sPathRel) + return E_OUTOFMEMORY; + wcscpy(sPathRel, pszPathRel); + } + else + sPathRel = NULL; + bDirty = TRUE; return ShellLink_UpdatePath(sPathRel, sPath, sWorkDir, &sPath);