From a3ee648d8b641604a87fcc3733d0946ced056074 Mon Sep 17 00:00:00 2001 From: Brock Mammen Date: Tue, 27 Aug 2019 07:46:07 -0500 Subject: [PATCH] [SHELLFIND] Simplify PIDLs to paths --- dll/win32/browseui/shellfind/CFindFolder.cpp | 25 +++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/dll/win32/browseui/shellfind/CFindFolder.cpp b/dll/win32/browseui/shellfind/CFindFolder.cpp index 853298344a6..b47062a714e 100644 --- a/dll/win32/browseui/shellfind/CFindFolder.cpp +++ b/dll/win32/browseui/shellfind/CFindFolder.cpp @@ -114,7 +114,7 @@ static LPITEMIDLIST _ILCreate(LPCWSTR lpszPath) } LPITEMIDLIST lpLastFSPidl = ILFindLastID(lpFSPidl); - int pathLen = (wcslen(lpszPath) + 1) * sizeof(WCHAR); + int pathLen = (PathFindFileNameW(lpszPath) - lpszPath) * sizeof(WCHAR); int cbData = sizeof(WORD) + pathLen + lpLastFSPidl->mkid.cb; LPITEMIDLIST pidl = (LPITEMIDLIST) SHAlloc(cbData + sizeof(WORD)); if (!pidl) @@ -125,7 +125,9 @@ static LPITEMIDLIST _ILCreate(LPCWSTR lpszPath) p += sizeof(WORD); memcpy(p, lpszPath, pathLen); - p += pathLen; + p += pathLen - sizeof(WCHAR); + *((WCHAR *) p) = '\0'; + p += sizeof(WCHAR); memcpy(p, lpLastFSPidl, lpLastFSPidl->mkid.cb); p += lpLastFSPidl->mkid.cb; @@ -436,10 +438,7 @@ STDMETHODIMP CFindFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELL if (iColumn == 1) { - WCHAR path[MAX_PATH]; - wcscpy(path, _ILGetPath(pidl)); - PathRemoveFileSpecW(path); - return SHSetStrRet(&pDetails->str, path); + return SHSetStrRet(&pDetails->str, _ILGetPath(pidl)); } return GetDisplayNameOf(pidl, SHGDN_NORMAL, &pDetails->str); @@ -548,15 +547,10 @@ class CFindFolderContextMenu : for (UINT i = 0; i < cidl; i++) { - WCHAR path[MAX_PATH]; - wcscpy(path, (LPCWSTR) apidl[0]->mkid.abID); - PathRemoveFileSpecW(path); - CComHeapPtr folderPidl(ILCreateFromPathW(path)); + CComHeapPtr folderPidl(ILCreateFromPathW(_ILGetPath(apidl[i]))); if (!folderPidl) return E_OUTOFMEMORY; - CComHeapPtr pidl(ILCreateFromPathW((LPCWSTR) apidl[i]->mkid.abID)); - if (!pidl) - return E_OUTOFMEMORY; + LPCITEMIDLIST pidl = _ILGetFSPidl(apidl[i]); SHOpenFolderAndSelectItems(folderPidl, 1, &pidl, 0); } return S_OK; @@ -607,10 +601,7 @@ STDMETHODIMP CFindFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHI if (riid == IID_IContextMenu) { - WCHAR path[MAX_PATH]; - wcscpy(path, (LPCWSTR) apidl[0]->mkid.abID); - PathRemoveFileSpecW(path); - CComHeapPtr folderPidl(ILCreateFromPathW(path)); + CComHeapPtr folderPidl(ILCreateFromPathW(_ILGetPath(apidl[0]))); if (!folderPidl) return E_OUTOFMEMORY; CComPtr pDesktopFolder;