*
*/
-#include <precomp.h>
+#include "precomp.h"
WINE_DEFAULT_DEBUG_CHANNEL(pidl);
WINE_DECLARE_DEBUG_CHANNEL(shell);
}
else
{
- ret = SHBindToParent(pidl, IID_IShellFolder, (LPVOID*)&psfParent, &pidllast);
+ ret = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psfParent), &pidllast);
if (SUCCEEDED(ret))
{
ret = psfParent->GetDisplayNameOf(pidllast, flag, &strret);
CComPtr<IDataObject> pDataObj;
HRESULT hr;
- hr = lpsf->GetUIObjectOf(0, 1, &pidlSimple,
- IID_IDataObject, 0, (LPVOID*)&pDataObj);
+ hr = lpsf->GetUIObjectOf(0, 1, &pidlSimple, IID_NULL_PPV_ARG(IDataObject, &pDataObj));
if (SUCCEEDED(hr))
{
STGMEDIUM medium;
*/
UINT WINAPI ILGetSize(LPCITEMIDLIST pidl)
{
- LPCSHITEMID si = &(pidl->mkid);
+ LPCSHITEMID si;
UINT len = 0;
if (pidl)
{
+ si = &(pidl->mkid);
+
while (si->cb)
{
len += si->cb;
lstrcpynA(pfd->cAlternateFileName, shortname, sizeof(pfd->cAlternateFileName));
else
pfd->cAlternateFileName[0] = '\0';
- return NOERROR;
+ return S_OK;
case SHGDFIL_NETRESOURCE:
case SHGDFIL_DESCRIPTIONID:
if (len < (int)sizeof(WIN32_FIND_DATAW))
return E_INVALIDARG;
- ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
+ ZeroMemory(pfd, sizeof (WIN32_FIND_DATAW));
_ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
pfd->cAlternateFileName[0] = '\0';
else if (!MultiByteToWideChar(CP_ACP, 0, shortname, -1, pfd->cAlternateFileName, 14))
pfd->cAlternateFileName[13] = 0;
- return NOERROR;
+ return S_OK;
case SHGDFIL_NETRESOURCE:
case SHGDFIL_DESCRIPTIONID:
if (!pidl)
return FALSE;
- hr = SHBindToParent(pidl, IID_IShellFolder, (VOID**)&psfFolder, &pidlLast);
+ hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psfFolder), &pidlLast);
if (FAILED(hr))
{
ERR("SHBindToParent failed: %x\n", hr);
LPITEMIDLIST _ILCreateFromFindDataW( const WIN32_FIND_DATAW *wfd )
{
- char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */
- DWORD len, len1, wlen, alen;
+ char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */
+ DWORD len, len1, wlen, alen, cbData;
LPITEMIDLIST pidl;
PIDLTYPE type;
type = (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
wlen = wcslen(wfd->cFileName) + 1;
- pidl = _ILAlloc(type, sizeof(FileStruct) + (alen + (alen & 1)) +
- sizeof(FileStructW) + wlen * sizeof(WCHAR) + sizeof(WORD));
+ cbData = sizeof(FileStruct) - 1 + (alen + (alen & 1)); // Note: szNames field is initially 1 byte long
+ cbData += sizeof(FileStructW) - 1 + wlen * sizeof(WCHAR); // Note: wszName field is initially 1 byte long
+ cbData += sizeof(WORD); // offset to FileStructW
+ pidl = _ILAlloc(type, cbData);
if (pidl)
{
LPPIDLDATA pData = _ILGetDataPointer(pidl);
memcpy(fs->szNames, buff, alen);
fsw = (FileStructW*)(pData->u.file.szNames + alen + (alen & 0x1));
- fsw->cbLen = sizeof(FileStructW) + wlen * sizeof(WCHAR) + sizeof(WORD);
+ fsw->cbLen = sizeof(FileStructW) - 1 + wlen * sizeof(WCHAR) + sizeof(WORD);
FileTimeToDosDateTime( &wfd->ftCreationTime, &fsw->uCreationDate, &fsw->uCreationTime);
FileTimeToDosDateTime( &wfd->ftLastAccessTime, &fsw->uLastAccessDate, &fsw->uLastAccessTime);
memcpy(fsw->wszName, wfd->cFileName, wlen * sizeof(WCHAR));
cbOffset > pidl->mkid.cb - sizeof(cbOffset) - sizeof(FileStructW) ||
pidl->mkid.cb != cbOffset + pFileStructW->cbLen)
{
- WARN("Invalid pidl format (cbOffset = %d)!\n", cbOffset);
+ ERR("Invalid pidl format (cbOffset = %d)!\n", cbOffset);
return NULL;
}