}
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)
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;
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);
for (UINT i = 0; i < cidl; i++)
{
- WCHAR path[MAX_PATH];
- wcscpy(path, (LPCWSTR) apidl[0]->mkid.abID);
- PathRemoveFileSpecW(path);
- CComHeapPtr<ITEMIDLIST> folderPidl(ILCreateFromPathW(path));
+ CComHeapPtr<ITEMIDLIST> folderPidl(ILCreateFromPathW(_ILGetPath(apidl[i])));
if (!folderPidl)
return E_OUTOFMEMORY;
- CComHeapPtr<ITEMIDLIST> 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;
if (riid == IID_IContextMenu)
{
- WCHAR path[MAX_PATH];
- wcscpy(path, (LPCWSTR) apidl[0]->mkid.abID);
- PathRemoveFileSpecW(path);
- CComHeapPtr<ITEMIDLIST> folderPidl(ILCreateFromPathW(path));
+ CComHeapPtr<ITEMIDLIST> folderPidl(ILCreateFromPathW(_ILGetPath(apidl[0])));
if (!folderPidl)
return E_OUTOFMEMORY;
CComPtr<IShellFolder> pDesktopFolder;