[PATCH 7/8] shell32: Return the IEnumIDList object on its creation.
Michael Stefaniuc
mstefani at redhat.de
Sun Oct 9 18:02:48 CDT 2011
---
dlls/shell32/cpanelfolder.c | 10 ++++++----
dlls/shell32/enumidlist.c | 22 ++--------------------
dlls/shell32/recyclebin.c | 8 ++++----
dlls/shell32/shell32_main.h | 18 +++++++++++++++++-
dlls/shell32/shfldr_desktop.c | 10 ++++++----
dlls/shell32/shfldr_fs.c | 10 ++++++----
dlls/shell32/shfldr_mycomp.c | 10 ++++++----
dlls/shell32/shfldr_netplaces.c | 7 +++++--
8 files changed, 52 insertions(+), 43 deletions(-)
diff --git a/dlls/shell32/cpanelfolder.c b/dlls/shell32/cpanelfolder.c
index d6c8f5c..15ad067 100644
--- a/dlls/shell32/cpanelfolder.c
+++ b/dlls/shell32/cpanelfolder.c
@@ -445,16 +445,18 @@ static HRESULT WINAPI ISF_ControlPanel_fnEnumObjects(IShellFolder2 *iface, HWND
DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
{
ICPanelImpl *This = impl_from_IShellFolder2(iface);
+ IEnumIDListImpl *list;
TRACE("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", This, hwndOwner, dwFlags, ppEnumIDList);
- *ppEnumIDList = IEnumIDList_Constructor();
- if (*ppEnumIDList)
- CreateCPanelEnumList(*ppEnumIDList, dwFlags);
+ if (!(list = IEnumIDList_Constructor()))
+ return E_OUTOFMEMORY;
+ *ppEnumIDList = &list->IEnumIDList_iface;
+ CreateCPanelEnumList(*ppEnumIDList, dwFlags);
TRACE("--(%p)->(new ID List: %p)\n", This, *ppEnumIDList);
- return(*ppEnumIDList) ? S_OK : E_OUTOFMEMORY;
+ return S_OK;
}
/**************************************************************************
diff --git a/dlls/shell32/enumidlist.c b/dlls/shell32/enumidlist.c
index fbfe881..9e43ed4 100644
--- a/dlls/shell32/enumidlist.c
+++ b/dlls/shell32/enumidlist.c
@@ -36,22 +36,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(shell);
-struct enumlist
-{
- struct enumlist *pNext;
- LPITEMIDLIST pidl;
-};
-
-typedef struct
-{
- IEnumIDList IEnumIDList_iface;
- LONG ref;
- struct enumlist *mpFirst;
- struct enumlist *mpLast;
- struct enumlist *mpCurrent;
-
-} IEnumIDListImpl;
-
/**************************************************************************
* AddToEnumList()
*/
@@ -340,7 +324,7 @@ static const IEnumIDListVtbl eidlvt =
IEnumIDList_fnClone,
};
-IEnumIDList *IEnumIDList_Constructor(void)
+IEnumIDListImpl *IEnumIDList_Constructor(void)
{
IEnumIDListImpl *lpeidl = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*lpeidl));
@@ -349,10 +333,8 @@ IEnumIDList *IEnumIDList_Constructor(void)
lpeidl->ref = 1;
lpeidl->IEnumIDList_iface.lpVtbl = &eidlvt;
}
- else
- return NULL;
TRACE("-- (%p)->()\n",lpeidl);
- return &lpeidl->IEnumIDList_iface;
+ return lpeidl;
}
diff --git a/dlls/shell32/recyclebin.c b/dlls/shell32/recyclebin.c
index 9e75c30..715be87 100644
--- a/dlls/shell32/recyclebin.c
+++ b/dlls/shell32/recyclebin.c
@@ -408,7 +408,7 @@ static HRESULT WINAPI RecycleBin_ParseDisplayName(IShellFolder2 *This, HWND hwnd
static HRESULT WINAPI RecycleBin_EnumObjects(IShellFolder2 *iface, HWND hwnd, SHCONTF grfFlags, IEnumIDList **ppenumIDList)
{
RecycleBin *This = impl_from_IShellFolder2(iface);
- IEnumIDList *list;
+ IEnumIDListImpl *list;
LPITEMIDLIST *pidls;
HRESULT ret = E_OUTOFMEMORY;
int pidls_count;
@@ -426,16 +426,16 @@ static HRESULT WINAPI RecycleBin_EnumObjects(IShellFolder2 *iface, HWND hwnd, SH
if (FAILED(ret = TRASH_EnumItems(&pidls, &pidls_count)))
goto failed;
for (i=0; i<pidls_count; i++)
- if (!AddToEnumList(list, pidls[i]))
+ if (!AddToEnumList(&list->IEnumIDList_iface, pidls[i]))
goto failed;
}
- *ppenumIDList = list;
+ *ppenumIDList = &list->IEnumIDList_iface;
return S_OK;
failed:
if (list)
- IEnumIDList_Release(list);
+ IEnumIDList_Release(&list->IEnumIDList_iface);
for (; i<pidls_count; i++)
ILFree(pidls[i]);
SHFree(pidls);
diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h
index 9359a3a..18ddf71 100644
--- a/dlls/shell32/shell32_main.h
+++ b/dlls/shell32/shell32_main.h
@@ -205,8 +205,24 @@ HRESULT SHELL_RegisterShellFolders(void) DECLSPEC_HIDDEN;
BOOL SHELL_IsShortcut(LPCITEMIDLIST) DECLSPEC_HIDDEN;
+/* IEnumIDList stuff */
+struct enumlist
+{
+ struct enumlist *pNext;
+ LPITEMIDLIST pidl;
+};
+
+typedef struct
+{
+ IEnumIDList IEnumIDList_iface;
+ LONG ref;
+ struct enumlist *mpFirst;
+ struct enumlist *mpLast;
+ struct enumlist *mpCurrent;
+} IEnumIDListImpl;
+
/* Creates an IEnumIDList; add LPITEMIDLISTs to it with AddToEnumList. */
-LPENUMIDLIST IEnumIDList_Constructor(void) DECLSPEC_HIDDEN;
+IEnumIDListImpl *IEnumIDList_Constructor(void) DECLSPEC_HIDDEN;
BOOL AddToEnumList(IEnumIDList *list, LPITEMIDLIST pidl) DECLSPEC_HIDDEN;
/* Enumerates the folders and/or files (depending on dwFlags) in lpszPath and
diff --git a/dlls/shell32/shfldr_desktop.c b/dlls/shell32/shfldr_desktop.c
index 808b920..2ea5244 100644
--- a/dlls/shell32/shfldr_desktop.c
+++ b/dlls/shell32/shfldr_desktop.c
@@ -345,17 +345,19 @@ static HRESULT WINAPI ISF_Desktop_fnEnumObjects (IShellFolder2 * iface,
HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST * ppEnumIDList)
{
IDesktopFolderImpl *This = impl_from_IShellFolder2(iface);
+ IEnumIDListImpl *list;
TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n",
This, hwndOwner, dwFlags, ppEnumIDList);
- *ppEnumIDList = IEnumIDList_Constructor();
- if (*ppEnumIDList)
- CreateDesktopEnumList(*ppEnumIDList, dwFlags);
+ if (!(list = IEnumIDList_Constructor()))
+ return E_OUTOFMEMORY;
+ *ppEnumIDList = &list->IEnumIDList_iface;
+ CreateDesktopEnumList(*ppEnumIDList, dwFlags);
TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList);
- return *ppEnumIDList ? S_OK : E_OUTOFMEMORY;
+ return S_OK;
}
/**************************************************************************
diff --git a/dlls/shell32/shfldr_fs.c b/dlls/shell32/shfldr_fs.c
index dd0231a..3556a62 100644
--- a/dlls/shell32/shfldr_fs.c
+++ b/dlls/shell32/shfldr_fs.c
@@ -448,17 +448,19 @@ IShellFolder_fnEnumObjects (IShellFolder2 * iface, HWND hwndOwner,
DWORD dwFlags, LPENUMIDLIST * ppEnumIDList)
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
+ IEnumIDListImpl *list;
TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", This, hwndOwner,
dwFlags, ppEnumIDList);
- *ppEnumIDList = IEnumIDList_Constructor();
- if (*ppEnumIDList)
- CreateFolderEnumList(*ppEnumIDList, This->sPathTarget, dwFlags);
+ if (!(list = IEnumIDList_Constructor()))
+ return E_OUTOFMEMORY;
+ *ppEnumIDList = &list->IEnumIDList_iface;
+ CreateFolderEnumList(*ppEnumIDList, This->sPathTarget, dwFlags);
TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList);
- return *ppEnumIDList ? S_OK : E_OUTOFMEMORY;
+ return S_OK;
}
/**************************************************************************
diff --git a/dlls/shell32/shfldr_mycomp.c b/dlls/shell32/shfldr_mycomp.c
index 265c5a4..9afb4d8 100644
--- a/dlls/shell32/shfldr_mycomp.c
+++ b/dlls/shell32/shfldr_mycomp.c
@@ -355,17 +355,19 @@ static HRESULT WINAPI ISF_MyComputer_fnEnumObjects (IShellFolder2 *iface,
HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
{
IMyComputerFolderImpl *This = impl_from_IShellFolder2(iface);
+ IEnumIDListImpl *list;
TRACE("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", This,
hwndOwner, dwFlags, ppEnumIDList);
- *ppEnumIDList = IEnumIDList_Constructor();
- if (*ppEnumIDList)
- CreateMyCompEnumList(*ppEnumIDList, dwFlags);
+ if (!(list = IEnumIDList_Constructor()))
+ return E_OUTOFMEMORY;
+ *ppEnumIDList = &list->IEnumIDList_iface;
+ CreateMyCompEnumList(*ppEnumIDList, dwFlags);
TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList);
- return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY;
+ return S_OK;
}
/**************************************************************************
diff --git a/dlls/shell32/shfldr_netplaces.c b/dlls/shell32/shfldr_netplaces.c
index 4c95d3e..c5034f8 100644
--- a/dlls/shell32/shfldr_netplaces.c
+++ b/dlls/shell32/shfldr_netplaces.c
@@ -244,15 +244,18 @@ static HRESULT WINAPI ISF_NetworkPlaces_fnEnumObjects (IShellFolder2 * iface,
HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST * ppEnumIDList)
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
+ IEnumIDListImpl *list;
TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", This,
hwndOwner, dwFlags, ppEnumIDList);
- *ppEnumIDList = IEnumIDList_Constructor();
+ if (!(list = IEnumIDList_Constructor()))
+ return E_OUTOFMEMORY;
+ *ppEnumIDList = &list->IEnumIDList_iface;
TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList);
- return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY;
+ return S_OK;
}
/**************************************************************************
--
1.7.6.4
More information about the wine-patches
mailing list