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/CShellLin... ============================================================================== --- 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; }