[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