From bd407b700e46ade4ef2e860a7a93bebb70cc89eb Mon Sep 17 00:00:00 2001 From: Michael Stefaniuc Date: Mon, 10 Oct 2011 01:02:48 +0200 Subject: [PATCH] shell32: Return the IEnumIDList object on its creation. --- 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 d6c8f5c55bb..15ad067eed1 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 fbfe881e74d..9e43ed45412 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 9e75c301fa9..715be878e4e 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; iIEnumIDList_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(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 dd0231a508a..3556a622a3e 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 265c5a46e4c..9afb4d88ffd 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 4c95d3eacf9..c5034f86b41 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; } /************************************************************************** -- 2.11.4.GIT