Author: gadamopoulos
Date: Thu Aug 17 16:46:15 2017
New Revision: 75597
URL:
http://svn.reactos.org/svn/reactos?rev=75597&view=rev
Log:
[SHELL32] -Simplify some coe in CShellLink.cpp
Modified:
trunk/reactos/dll/win32/shell32/CShellLink.cpp
Modified: trunk/reactos/dll/win32/shell32/CShellLink.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/CShellLi…
==============================================================================
--- trunk/reactos/dll/win32/shell32/CShellLink.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/CShellLink.cpp [iso-8859-1] Thu Aug 17 16:46:15 2017
@@ -1690,28 +1690,31 @@
return S_OK;
}
-static HRESULT SHELL_PidlGetIconLocationW(IShellFolder* psf, LPCITEMIDLIST pidl,
+static HRESULT SHELL_PidlGetIconLocationW(PCIDLIST_ABSOLUTE pidl,
UINT uFlags, PWSTR pszIconFile, UINT cchMax, int *piIndex, UINT *pwFlags)
{
LPCITEMIDLIST pidlLast;
+ CComPtr<IShellFolder> psf;
HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf),
&pidlLast);
- if (SUCCEEDED(hr))
- {
- CComPtr<IExtractIconW> pei;
-
- hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_NULL_PPV_ARG(IExtractIconW,
&pei));
- if (SUCCEEDED(hr))
- hr = pei->GetIconLocation(uFlags, pszIconFile, cchMax, piIndex, pwFlags);
-
- psf->Release();
- }
-
- return hr;
+ if (FAILED_UNEXPECTEDLY(hr))
+ return hr;
+
+ CComPtr<IExtractIconW> pei;
+ hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_NULL_PPV_ARG(IExtractIconW,
&pei));
+ if (FAILED_UNEXPECTEDLY(hr))
+ return hr;
+
+ hr = pei->GetIconLocation(uFlags, pszIconFile, cchMax, piIndex, pwFlags);
+ if (FAILED_UNEXPECTEDLY(hr))
+ return hr;
+
+ return S_OK;
}
HRESULT STDMETHODCALLTYPE CShellLink::GetIconLocation(UINT uFlags, PWSTR pszIconFile,
UINT cchMax, int *piIndex, UINT *pwFlags)
{
+ HRESULT hr;
/*
* It is possible for a shell link to point to another shell link,
* and in particular there is the possibility to point to itself.
@@ -1732,33 +1735,30 @@
if (m_pPidl || m_sPath)
{
- CComPtr<IShellFolder> pdsk;
-
- HRESULT hr = SHGetDesktopFolder(&pdsk);
- if (SUCCEEDED(hr))
- {
- /* first look for an icon using the PIDL (if present) */
- if (m_pPidl)
- hr = SHELL_PidlGetIconLocationW(pdsk, m_pPidl, uFlags, pszIconFile,
cchMax, piIndex, pwFlags);
- else
- hr = E_FAIL;
+ /* first look for an icon using the PIDL (if present) */
+ if (m_pPidl)
+ hr = SHELL_PidlGetIconLocationW(m_pPidl, uFlags, pszIconFile, cchMax,
piIndex, pwFlags);
+ else
+ hr = E_FAIL;
#if 0 // FIXME: Analyse further whether this is needed...
- /* if we couldn't find an icon yet, look for it using the file system
path */
- if (FAILED(hr) && m_sPath)
+ /* if we couldn't find an icon yet, look for it using the file system path
*/
+ if (FAILED(hr) && m_sPath)
+ {
+ LPITEMIDLIST pidl;
+ CComPtr<IShellFolder> pdsk;
+
+ hr = SHGetDesktopFolder(&pdsk);
+
+ /* LPITEMIDLIST pidl = ILCreateFromPathW(sPath); */
+ hr = pdsk->ParseDisplayName(0, NULL, m_sPath, NULL, &pidl, NULL);
+ if (SUCCEEDED(hr))
{
- LPITEMIDLIST pidl;
-
- /* LPITEMIDLIST pidl = ILCreateFromPathW(sPath); */
- hr = pdsk->ParseDisplayName(0, NULL, m_sPath, NULL, &pidl, NULL);
- if (SUCCEEDED(hr))
- {
- hr = SHELL_PidlGetIconLocationW(pdsk, pidl, uFlags, pszIconFile,
cchMax, piIndex, pwFlags);
- SHFree(pidl);
- }
+ hr = SHELL_PidlGetIconLocationW(pidl, uFlags, pszIconFile, cchMax,
piIndex, pwFlags);
+ SHFree(pidl);
}
+ }
#endif
- }
return hr;
}