Nikolay Sivov : shell32/shellview: Improve error handling on some helpers, fix possible leak.

Alexandre Julliard julliard at winehq.org
Mon Mar 15 12:19:36 CDT 2010


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sat Mar  6 23:47:59 2010 +0300

shell32/shellview: Improve error handling on some helpers, fix possible leak.

---

 dlls/shell32/shlview.c |  138 ++++++++++++++++++++++++------------------------
 1 files changed, 69 insertions(+), 69 deletions(-)

diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c
index 80c4c3a..ae133a0 100644
--- a/dlls/shell32/shlview.c
+++ b/dlls/shell32/shlview.c
@@ -634,96 +634,96 @@ static INT CALLBACK fill_list( LPVOID ptr, LPVOID arg )
     return TRUE;
 }
 
-static HRESULT ShellView_FillList(IShellViewImpl * This)
+static HRESULT ShellView_FillList(IShellViewImpl *This)
 {
-	LPENUMIDLIST	pEnumIDList;
-	LPITEMIDLIST	pidl;
-	DWORD		dwFetched;
-	HRESULT		hRes;
-	HDPA		hdpa;
-
-	TRACE("%p\n",This);
-
-	/* get the itemlist from the shfolder*/
-	hRes = IShellFolder_EnumObjects(This->pSFParent,This->hWnd, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pEnumIDList);
-	if (hRes != S_OK)
-	{
-	  if (hRes==S_FALSE)
-	    return(NOERROR);
-	  return(hRes);
-	}
+    LPENUMIDLIST pEnumIDList;
+    LPITEMIDLIST pidl;
+    DWORD fetched;
+    HRESULT hr;
+    HDPA hdpa;
 
-	/* create a pointer array */
-	hdpa = DPA_Create(16);
-	if (!hdpa)
-	{
-	  return(E_OUTOFMEMORY);
-	}
+    TRACE("(%p)\n", This);
 
-	/* copy the items into the array*/
-	while((S_OK == IEnumIDList_Next(pEnumIDList,1, &pidl, &dwFetched)) && dwFetched)
-	{
-	  if (DPA_InsertPtr(hdpa, 0x7fff, pidl) == -1)
-	  {
-	    SHFree(pidl);
-	  }
-	}
+    /* get the itemlist from the shfolder*/
+    hr = IShellFolder_EnumObjects(This->pSFParent, This->hWnd, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pEnumIDList);
+    if (hr != S_OK) return hr;
 
-	/* sort the array */
-	DPA_Sort(hdpa, ShellView_CompareItems, (LPARAM)This->pSFParent);
+    /* create a pointer array */
+    hdpa = DPA_Create(16);
+    if (!hdpa)
+    {
+        IEnumIDList_Release(pEnumIDList);
+        return E_OUTOFMEMORY;
+    }
 
-	/*turn the listview's redrawing off*/
-	SendMessageA(This->hWndList, WM_SETREDRAW, FALSE, 0);
+    /* copy the items into the array*/
+    while((S_OK == IEnumIDList_Next(pEnumIDList, 1, &pidl, &fetched)) && fetched)
+    {
+        if (DPA_InsertPtr(hdpa, DPA_GetPtrCount(hdpa), pidl) == -1)
+        {
+            SHFree(pidl);
+        }
+    }
 
-        DPA_DestroyCallback( hdpa, fill_list, This );
+    /* sort the array */
+    DPA_Sort(hdpa, ShellView_CompareItems, (LPARAM)This->pSFParent);
 
-	/*turn the listview's redrawing back on and force it to draw*/
-	SendMessageA(This->hWndList, WM_SETREDRAW, TRUE, 0);
+    SendMessageW(This->hWndList, WM_SETREDRAW, FALSE, 0);
+    DPA_DestroyCallback(hdpa, fill_list, This);
+    SendMessageW(This->hWndList, WM_SETREDRAW, TRUE, 0);
 
-	IEnumIDList_Release(pEnumIDList); /* destroy the list*/
+    IEnumIDList_Release(pEnumIDList);
 
-	return S_OK;
+    return S_OK;
 }
 
 /**********************************************************
 *  ShellView_OnCreate()
 */
-static LRESULT ShellView_OnCreate(IShellViewImpl * This)
+static LRESULT ShellView_OnCreate(IShellViewImpl *This)
 {
-	IDropTarget* pdt;
-	SHChangeNotifyEntry ntreg;
-	IPersistFolder2 * ppf2 = NULL;
+    IShellView2 *iface = (IShellView2*)This;
+    IPersistFolder2 *ppf2;
+    IDropTarget* pdt;
+    HRESULT hr;
 
-	TRACE("%p\n",This);
+    TRACE("(%p)\n", This);
 
-	if(ShellView_CreateList(This))
-	{
-	  if(ShellView_InitList(This))
-	  {
+    if (ShellView_CreateList(This))
+    {
+        if (ShellView_InitList(This))
+        {
 	    ShellView_FillList(This);
-	  }
-	}
+        }
+    }
 
-        if (SUCCEEDED(IUnknown_QueryInterface((IUnknown*)&This->lpVtbl, &IID_IDropTarget, (LPVOID*)&pdt)))
-	{
-	    RegisterDragDrop(This->hWnd, pdt);
-	    IDropTarget_Release(pdt);
-	}
+    hr = IShellView2_QueryInterface(iface, &IID_IDropTarget, (LPVOID*)&pdt);
+    if (hr == S_OK)
+    {
+        RegisterDragDrop(This->hWnd, pdt);
+        IDropTarget_Release(pdt);
+    }
 
-	/* register for receiving notifications */
-	IShellFolder_QueryInterface(This->pSFParent, &IID_IPersistFolder2, (LPVOID*)&ppf2);
-	if (ppf2)
-	{
-	  IPersistFolder2_GetCurFolder(ppf2, (LPITEMIDLIST*)&ntreg.pidl);
-	  ntreg.fRecursive = TRUE;
-	  This->hNotify = SHChangeNotifyRegister(This->hWnd, SHCNF_IDLIST, SHCNE_ALLEVENTS, SHV_CHANGE_NOTIFY, 1, &ntreg);
-	  SHFree((LPITEMIDLIST)ntreg.pidl);
-	  IPersistFolder2_Release(ppf2);
-	}
+    /* register for receiving notifications */
+    hr = IShellFolder_QueryInterface(This->pSFParent, &IID_IPersistFolder2, (LPVOID*)&ppf2);
+    if (hr == S_OK)
+    {
+        SHChangeNotifyEntry ntreg;
 
-	This->hAccel = LoadAcceleratorsA(shell32_hInstance, "shv_accel");
+        hr = IPersistFolder2_GetCurFolder(ppf2, (LPITEMIDLIST*)&ntreg.pidl);
+        if (hr == S_OK)
+        {
+            ntreg.fRecursive = TRUE;
+            This->hNotify = SHChangeNotifyRegister(This->hWnd, SHCNF_IDLIST, SHCNE_ALLEVENTS,
+                                                   SHV_CHANGE_NOTIFY, 1, &ntreg);
+            SHFree((LPITEMIDLIST)ntreg.pidl);
+        }
+        IPersistFolder2_Release(ppf2);
+    }
 
-	return S_OK;
+    This->hAccel = LoadAcceleratorsA(shell32_hInstance, "shv_accel");
+
+    return S_OK;
 }
 
 /**********************************************************
@@ -1875,7 +1875,7 @@ static HRESULT WINAPI IShellView_fnRefresh(IShellView2 * iface)
 {
 	IShellViewImpl *This = (IShellViewImpl *)iface;
 
-	TRACE("(%p)\n",This);
+	TRACE("(%p)\n", This);
 
 	SendMessageW(This->hWndList, LVM_DELETEALLITEMS, 0, 0);
 	ShellView_FillList(This);




More information about the wine-cvs mailing list