From e8f24951d6d791747026b745ab1633ce4d01d8eb Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Thu, 17 Aug 2017 16:46:15 +0000 Subject: [PATCH 1/1] [SHELL32] -Simplify some coe in CShellLink.cpp svn path=/trunk/; revision=75597 --- reactos/dll/win32/shell32/CShellLink.cpp | 62 ++++++++++++------------ 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/reactos/dll/win32/shell32/CShellLink.cpp b/reactos/dll/win32/shell32/CShellLink.cpp index e0051f6a609..918c98e6101 100644 --- a/reactos/dll/win32/shell32/CShellLink.cpp +++ b/reactos/dll/win32/shell32/CShellLink.cpp @@ -1690,28 +1690,31 @@ HRESULT STDMETHODCALLTYPE CShellLink::GetIconLocation(LPWSTR pszIconPath, INT cc 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 psf; HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlLast); - if (SUCCEEDED(hr)) - { - CComPtr pei; + if (FAILED_UNEXPECTEDLY(hr)) + return hr; - hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_NULL_PPV_ARG(IExtractIconW, &pei)); - if (SUCCEEDED(hr)) - hr = pei->GetIconLocation(uFlags, pszIconFile, cchMax, piIndex, pwFlags); + CComPtr pei; + hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_NULL_PPV_ARG(IExtractIconW, &pei)); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; - psf->Release(); - } + hr = pei->GetIconLocation(uFlags, pszIconFile, cchMax, piIndex, pwFlags); + if (FAILED_UNEXPECTEDLY(hr)) + return 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 @@ HRESULT STDMETHODCALLTYPE CShellLink::GetIconLocation(UINT uFlags, PWSTR pszIcon if (m_pPidl || m_sPath) { - CComPtr pdsk; + /* 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; - HRESULT hr = SHGetDesktopFolder(&pdsk); - if (SUCCEEDED(hr)) +#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) { - /* 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; + LPITEMIDLIST pidl; + CComPtr pdsk; -#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) - { - LPITEMIDLIST pidl; + hr = SHGetDesktopFolder(&pdsk); - /* 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); - } + /* LPITEMIDLIST pidl = ILCreateFromPathW(sPath); */ + hr = pdsk->ParseDisplayName(0, NULL, m_sPath, NULL, &pidl, NULL); + if (SUCCEEDED(hr)) + { + hr = SHELL_PidlGetIconLocationW(pidl, uFlags, pszIconFile, cchMax, piIndex, pwFlags); + SHFree(pidl); } -#endif } +#endif return hr; } -- 2.17.1