Small fixes.
diff --git a/dlls/shell32/pidl.c b/dlls/shell32/pidl.c
index bfa9aca..d1b41b5 100644
--- a/dlls/shell32/pidl.c
+++ b/dlls/shell32/pidl.c
@@ -11,7 +11,6 @@
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
-#include <assert.h>
#include "winbase.h"
#include "debugtools.h"
#include "shell.h"
@@ -29,10 +28,7 @@
DECLARE_DEBUG_CHANNEL(shell)
void pdump (LPCITEMIDLIST pidl)
-{ DWORD type;
- char * szData;
- char * szShortName;
- char szName[MAX_PATH];
+{
BOOL bIsShellDebug;
LPITEMIDLIST pidltemp = pidl;
@@ -55,13 +51,21 @@
{
do
{
- type = _ILGetDataPointer(pidltemp)->type;
- szData = _ILGetTextPointer(pidltemp);
- szShortName = _ILGetSTextPointer(pidltemp);
- _ILSimpleGetText(pidltemp, szName, MAX_PATH);
+ DWORD dwAttrib = 0;
+ LPPIDLDATA pData = _ILGetDataPointer(pidltemp);
+ DWORD type = pData->type;
+ LPSTR szLongName = _ILGetTextPointer(pidltemp);
+ LPSTR szShortName = _ILGetSTextPointer(pidltemp);
+ char szName[MAX_PATH];
- MESSAGE ("-- pidl=%p size=%u type=%lx name=%s (%s,%s)\n",
- pidltemp, pidltemp->mkid.cb,type,szName,debugstr_a(szData), debugstr_a(szShortName));
+ _ILSimpleGetText(pidltemp, szName, MAX_PATH);
+ if( PT_FOLDER == type)
+ dwAttrib = pData->u.folder.uFileAttribs;
+ else if( PT_VALUE == type)
+ dwAttrib = pData->u.file.uFileAttribs;
+
+ MESSAGE ("-- pidl=%p size=%u type=%lx attr=0x%08lx name=%s (%s,%s)\n",
+ pidltemp, pidltemp->mkid.cb,type,dwAttrib,szName,debugstr_a(szLongName), debugstr_a(szShortName));
pidltemp = ILGetNext(pidltemp);
@@ -677,25 +681,23 @@
* exported by ordinal
*/
DWORD WINAPI ILFree(LPITEMIDLIST pidl)
-{ TRACE("(pidl=0x%08lx)\n",(DWORD)pidl);
+{
+ TRACE("(pidl=0x%08lx)\n",(DWORD)pidl);
- if (!pidl)
- return FALSE;
-
- return SHFree(pidl);
+ if(!pidl) return FALSE;
+ SHFree(pidl);
+ return TRUE;
}
/*************************************************************************
* ILGlobalFree [SHELL32.156]
*
*/
-DWORD WINAPI ILGlobalFree( LPITEMIDLIST pidl)
+void WINAPI ILGlobalFree( LPCITEMIDLIST pidl)
{
TRACE("%p\n",pidl);
- if (!pidl)
- return FALSE;
-
- return pCOMCTL32_Free (pidl);
+ if(!pidl) return;
+ pCOMCTL32_Free(pidl);
}
/*************************************************************************
* ILCreateFromPath [SHELL32.157]
@@ -858,7 +860,8 @@
{
TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len);
- if (! psf || !dest ) return E_INVALIDARG;
+ pdump(pidl);
+ if (!psf || !dest ) return E_INVALIDARG;
switch (nFormat)
{
@@ -894,6 +897,10 @@
*/
HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID dest, int len)
{
+ TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len);
+
+ pdump(pidl);
+
if (! psf || !dest ) return E_INVALIDARG;
switch (nFormat)
@@ -956,6 +963,11 @@
{
SHGetSpecialFolderPathA(0, pszPath, CSIDL_DESKTOPDIRECTORY, FALSE);
}
+ else if (_ILIsSpecialFolder(ILFindLastID(pidl)))
+ {
+ /* we are somewhere in a special folder */
+ return FALSE;
+ }
else
{
if (SHGetDesktopFolder(&shellfolder)==S_OK)
@@ -1539,6 +1551,8 @@
{
LPPIDLDATA pdata =_ILGetDataPointer(pidl);
+ if(! pdata) return FALSE;
+
switch (pdata->type)
{
case PT_FOLDER:
@@ -1587,6 +1601,8 @@
LPPIDLDATA pdata =_ILGetDataPointer(pidl);
DWORD dwSize;
+ if(! pdata) return 0;
+
switch (pdata->type)
{
case PT_VALUE:
@@ -1678,7 +1694,8 @@
* RETURNS
* Attributes
*
- * NOTES
+ * FIXME
+ * return value 0 in case of error is a valid return value
*
*/
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
@@ -1687,6 +1704,8 @@
WORD wAttrib = 0;
int i;
+ if(! pData) return 0;
+
switch(pData->type)
{
case PT_FOLDER:
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c
index f2cb562..7fba74b 100644
--- a/dlls/shell32/shlview.c
+++ b/dlls/shell32/shlview.c
@@ -6,10 +6,6 @@
* This is the view visualizing the data provied by the shellfolder.
* No direct access to data from pidls should be done from here.
*
- * FIXME: There is not jet a official interface defined to manipulate
- * the objects shown in the view (rename, move...). This should be
- * implemented as additional interface to IShellFolder.
- *
* FIXME: The order by part of the background context menu should be
* buily according to the columns shown.
*
@@ -471,7 +467,7 @@
*/
static int LV_FindItemByPidl(
IShellViewImpl * This,
- LPITEMIDLIST pidl)
+ LPCITEMIDLIST pidl)
{
LVITEMA lvItem;
ZeroMemory(&lvItem, sizeof(LVITEMA));
@@ -491,11 +487,11 @@
/**********************************************************
* LV_AddItem()
*/
-static BOOLEAN LV_AddItem(IShellViewImpl * This, LPITEMIDLIST pidl)
+static BOOLEAN LV_AddItem(IShellViewImpl * This, LPCITEMIDLIST pidl)
{
LVITEMA lvItem;
- FIXME("(%p)(pidl=%p)\n", This, pidl);
+ TRACE("(%p)(pidl=%p)\n", This, pidl);
ZeroMemory(&lvItem, sizeof(lvItem)); /* create the listview item*/
lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; /*set the mask*/
@@ -509,11 +505,11 @@
/**********************************************************
* LV_DeleteItem()
*/
-static BOOLEAN LV_DeleteItem(IShellViewImpl * This, LPITEMIDLIST pidl)
+static BOOLEAN LV_DeleteItem(IShellViewImpl * This, LPCITEMIDLIST pidl)
{
int nIndex;
- FIXME("(%p)(pidl=%p)\n", This, pidl);
+ TRACE("(%p)(pidl=%p)\n", This, pidl);
nIndex = LV_FindItemByPidl(This, ILFindLastID(pidl));
return (-1==ListView_DeleteItem(This->hWndList, nIndex))? FALSE: TRUE;
@@ -522,12 +518,12 @@
/**********************************************************
* LV_RenameItem()
*/
-static BOOLEAN LV_RenameItem(IShellViewImpl * This, LPITEMIDLIST pidlOld, LPITEMIDLIST pidlNew )
+static BOOLEAN LV_RenameItem(IShellViewImpl * This, LPCITEMIDLIST pidlOld, LPCITEMIDLIST pidlNew )
{
int nItem;
LVITEMA lvItem;
- FIXME("(%p)(pidlold=%p pidlnew=%p)\n", This, pidlOld, pidlNew);
+ TRACE("(%p)(pidlold=%p pidlnew=%p)\n", This, pidlOld, pidlNew);
nItem = LV_FindItemByPidl(This, ILFindLastID(pidlOld));
if ( -1 != nItem )
@@ -603,13 +599,8 @@
/* in a commdlg This works as a filemask*/
if ( IncludeObject(This, pidl)==S_OK )
- {
- if(! LV_AddItem(This, pidl)) SHFree(pidl); /* insert failed: PIDL not owned by the LV */
- }
- else
- {
- SHFree(pidl); /* not inserted */
- }
+ LV_AddItem(This, pidl);
+ SHFree(pidl);
}
/*turn the listview's redrawing back on and force it to draw*/
@@ -1199,7 +1190,7 @@
if (ShellView_GetSelections(This))
{
IDataObject * pda;
- DWORD dwAttributes;
+ DWORD dwAttributes = SFGAO_CANLINK;
DWORD dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE;
if(GetShellOle())