mirror of
https://github.com/reactos/reactos.git
synced 2024-07-03 03:04:22 +00:00
[SHELL32] CFSFolder parsing must only apply bind data to the last item (#6794)
When IShellFolder::ParseDisplayName is asked to parse multiple path elements, the IFileSystemBindData (if any) only applies to the last item. The other elements are always folders.
This commit is contained in:
parent
ef80b3dde4
commit
07d55ce1cf
|
@ -685,7 +685,7 @@ HRESULT SHELL32_GetFSItemAttributes(IShellFolder * psf, LPCITEMIDLIST pidl, LPDW
|
||||||
|
|
||||||
HRESULT CFSFolder::_ParseSimple(
|
HRESULT CFSFolder::_ParseSimple(
|
||||||
_In_ LPOLESTR lpszDisplayName,
|
_In_ LPOLESTR lpszDisplayName,
|
||||||
_Out_ WIN32_FIND_DATAW *pFind,
|
_Inout_ WIN32_FIND_DATAW *pFind,
|
||||||
_Out_ LPITEMIDLIST *ppidl)
|
_Out_ LPITEMIDLIST *ppidl)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
@ -693,6 +693,8 @@ HRESULT CFSFolder::_ParseSimple(
|
||||||
|
|
||||||
*ppidl = NULL;
|
*ppidl = NULL;
|
||||||
|
|
||||||
|
const DWORD finalattr = pFind->dwFileAttributes;
|
||||||
|
const DWORD finalsizelo = pFind->nFileSizeLow;
|
||||||
LPITEMIDLIST pidl;
|
LPITEMIDLIST pidl;
|
||||||
for (hr = S_OK; SUCCEEDED(hr); hr = SHILAppend(pidl, ppidl))
|
for (hr = S_OK; SUCCEEDED(hr); hr = SHILAppend(pidl, ppidl))
|
||||||
{
|
{
|
||||||
|
@ -700,9 +702,8 @@ HRESULT CFSFolder::_ParseSimple(
|
||||||
if (hr != S_OK)
|
if (hr != S_OK)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (pchNext)
|
pFind->dwFileAttributes = pchNext ? FILE_ATTRIBUTE_DIRECTORY : finalattr;
|
||||||
pFind->dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
|
pFind->nFileSizeLow = pchNext ? 0 : finalsizelo;
|
||||||
|
|
||||||
pidl = _ILCreateFromFindDataW(pFind);
|
pidl = _ILCreateFromFindDataW(pFind);
|
||||||
if (!pidl)
|
if (!pidl)
|
||||||
{
|
{
|
||||||
|
|
|
@ -36,7 +36,7 @@ class CFSFolder :
|
||||||
|
|
||||||
HRESULT _ParseSimple(
|
HRESULT _ParseSimple(
|
||||||
_In_ LPOLESTR lpszDisplayName,
|
_In_ LPOLESTR lpszDisplayName,
|
||||||
_Out_ WIN32_FIND_DATAW *pFind,
|
_Inout_ WIN32_FIND_DATAW *pFind,
|
||||||
_Out_ LPITEMIDLIST *ppidl);
|
_Out_ LPITEMIDLIST *ppidl);
|
||||||
BOOL _GetFindDataFromName(_In_ LPCWSTR pszName, _Out_ WIN32_FIND_DATAW *pFind);
|
BOOL _GetFindDataFromName(_In_ LPCWSTR pszName, _Out_ WIN32_FIND_DATAW *pFind);
|
||||||
HRESULT _CreateIDListFromName(LPCWSTR pszName, DWORD attrs, IBindCtx *pbc, LPITEMIDLIST *ppidl);
|
HRESULT _CreateIDListFromName(LPCWSTR pszName, DWORD attrs, IBindCtx *pbc, LPITEMIDLIST *ppidl);
|
||||||
|
|
Loading…
Reference in a new issue