[PATCH 1/2] shell32: Simplify the creation of an IEnumIDList.

Michael Stefaniuc mstefani at redhat.de
Tue Mar 25 17:33:45 CDT 2014


---
 dlls/shell32/shfldr_unixfs.c | 24 +++++++++---------------
 1 file changed, 9 insertions(+), 15 deletions(-)

diff --git a/dlls/shell32/shfldr_unixfs.c b/dlls/shell32/shfldr_unixfs.c
index 10b2879..3e8ad1e 100644
--- a/dlls/shell32/shfldr_unixfs.c
+++ b/dlls/shell32/shfldr_unixfs.c
@@ -971,14 +971,12 @@ static HRESULT WINAPI ShellFolder2_ParseDisplayName(IShellFolder2* iface, HWND h
     return result;
 }
 
-static IUnknown *UnixSubFolderIterator_Constructor(UnixFolder *pUnixFolder, SHCONTF fFilter);
+static IEnumIDList *UnixSubFolderIterator_Constructor(UnixFolder *pUnixFolder, SHCONTF fFilter);
 
 static HRESULT WINAPI ShellFolder2_EnumObjects(IShellFolder2* iface, HWND hwndOwner,
     SHCONTF grfFlags, IEnumIDList** ppEnumIDList)
 {
     UnixFolder *This = impl_from_IShellFolder2(iface);
-    IUnknown *newIterator;
-    HRESULT hr;
 
     TRACE("(%p)->(%p 0x%08x %p)\n", This, hwndOwner, grfFlags, ppEnumIDList);
 
@@ -987,11 +985,8 @@ static HRESULT WINAPI ShellFolder2_EnumObjects(IShellFolder2* iface, HWND hwndOw
         return E_UNEXPECTED;
     }
 
-    newIterator = UnixSubFolderIterator_Constructor(This, grfFlags);
-    hr = IUnknown_QueryInterface(newIterator, &IID_IEnumIDList, (void**)ppEnumIDList);
-    IUnknown_Release(newIterator);
-
-    return hr;
+    *ppEnumIDList = UnixSubFolderIterator_Constructor(This, grfFlags);
+    return S_OK;
 }
 
 static HRESULT CreateUnixFolder(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv, const CLSID *pCLSID);
@@ -2521,21 +2516,20 @@ static const IEnumIDListVtbl UnixSubFolderIterator_IEnumIDList_Vtbl = {
     UnixSubFolderIterator_IEnumIDList_Clone
 };
 
-static IUnknown *UnixSubFolderIterator_Constructor(UnixFolder *pUnixFolder, SHCONTF fFilter) {
+static IEnumIDList *UnixSubFolderIterator_Constructor(UnixFolder *pUnixFolder, SHCONTF fFilter)
+{
     UnixSubFolderIterator *iterator;
 
     TRACE("(pUnixFolder=%p)\n", pUnixFolder);
-    
-    iterator = SHAlloc((ULONG)sizeof(UnixSubFolderIterator));
+
+    iterator = SHAlloc(sizeof(*iterator));
     iterator->lpIEnumIDListVtbl = &UnixSubFolderIterator_IEnumIDList_Vtbl;
-    iterator->m_cRef = 0;
+    iterator->m_cRef = 1;
     iterator->m_fFilter = fFilter;
     iterator->m_dirFolder = opendir(pUnixFolder->m_pszPath);
     lstrcpyA(iterator->m_szFolder, pUnixFolder->m_pszPath);
 
-    UnixSubFolderIterator_IEnumIDList_AddRef((IEnumIDList*)iterator);
-    
-    return (IUnknown*)iterator;
+    return (IEnumIDList*)iterator;
 }
 
 #else /* __MINGW32__ || _MSC_VER */
-- 
1.8.3.1



More information about the wine-patches mailing list