Module: wine Branch: master Commit: bd407b700e46ade4ef2e860a7a93bebb70cc89eb URL: http://source.winehq.org/git/wine.git/?a=commit;h=bd407b700e46ade4ef2e860a7a...
Author: Michael Stefaniuc mstefani@redhat.de Date: Mon Oct 10 01:02:48 2011 +0200
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 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; }
/**************************************************************************