Nikolay Sivov : shell32: Cleanup IShellItem creation calls.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Apr 8 10:40:44 CDT 2015


Module: wine
Branch: master
Commit: 17339f4f94b9e76d52957e10a636627a56ab2517
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=17339f4f94b9e76d52957e10a636627a56ab2517

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue Apr  7 12:55:48 2015 +0300

shell32: Cleanup IShellItem creation calls.

---

 dlls/shell32/shellitem.c | 45 +++++++++++++++++----------------------------
 1 file changed, 17 insertions(+), 28 deletions(-)

diff --git a/dlls/shell32/shellitem.c b/dlls/shell32/shellitem.c
index d8cb6a8..a410381 100644
--- a/dlls/shell32/shellitem.c
+++ b/dlls/shell32/shellitem.c
@@ -548,7 +548,6 @@ HRESULT WINAPI IShellItem_Constructor(IUnknown *pUnkOuter, REFIID riid, void **p
 HRESULT WINAPI SHCreateShellItem(LPCITEMIDLIST pidlParent,
     IShellFolder *psfParent, LPCITEMIDLIST pidl, IShellItem **ppsi)
 {
-    ShellItem *This;
     LPITEMIDLIST new_pidl;
     HRESULT ret;
 
@@ -597,16 +596,9 @@ HRESULT WINAPI SHCreateShellItem(LPCITEMIDLIST pidlParent,
             return E_OUTOFMEMORY;
     }
 
-    ret = IShellItem_Constructor(NULL, &IID_IShellItem, (void**)&This);
-    if (This)
-    {
-        *ppsi = (IShellItem*)&This->IShellItem2_iface;
-        This->pidl = new_pidl;
-    }
-    else
-    {
-        ILFree(new_pidl);
-    }
+    ret = SHCreateItemFromIDList(new_pidl, &IID_IShellItem, (void**)ppsi);
+    ILFree(new_pidl);
+
     return ret;
 }
 
@@ -621,37 +613,34 @@ HRESULT WINAPI SHCreateItemFromParsingName(PCWSTR pszPath,
     ret = SHParseDisplayName(pszPath, pbc, &pidl, 0, NULL);
     if(SUCCEEDED(ret))
     {
-        ShellItem *This;
-        ret = IShellItem_Constructor(NULL, riid, (void**)&This);
-
-        if(SUCCEEDED(ret))
-        {
-            This->pidl = pidl;
-            *ppv = (void*)This;
-        }
-        else
-        {
-            ILFree(pidl);
-        }
+        ret = SHCreateItemFromIDList(pidl, riid, ppv);
+        ILFree(pidl);
     }
     return ret;
 }
 
 HRESULT WINAPI SHCreateItemFromIDList(PCIDLIST_ABSOLUTE pidl, REFIID riid, void **ppv)
 {
-    ShellItem *psiimpl;
+    IPersistIDList *persist;
     HRESULT ret;
 
     if(!pidl)
         return E_INVALIDARG;
 
-    ret = IShellItem_Constructor(NULL, riid, ppv);
-    if(SUCCEEDED(ret))
+    *ppv = NULL;
+    ret = IShellItem_Constructor(NULL, &IID_IPersistIDList, (void**)&persist);
+    if(FAILED(ret))
+        return ret;
+
+    ret = IPersistIDList_SetIDList(persist, pidl);
+    if(FAILED(ret))
     {
-        psiimpl = (ShellItem*)*ppv;
-        psiimpl->pidl = ILClone(pidl);
+        IPersistIDList_Release(persist);
+        return ret;
     }
 
+    ret = IPersistIDList_QueryInterface(persist, riid, ppv);
+    IPersistIDList_Release(persist);
     return ret;
 }
 




More information about the wine-cvs mailing list