[PATCH 3/4] Free ID array when removing all items
Nikolay Sivov
bunglehead at gmail.com
Wed Oct 21 17:25:04 CDT 2009
---
dlls/comctl32/listview.c | 19 ++++++++++++++-----
1 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index ea79b38..a97fc46 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -5004,6 +5004,8 @@ static BOOL LISTVIEW_DeleteAllItems(LISTVIEW_INFO *infoPtr, BOOL destroy)
HDPA hdpaSubItems = NULL;
BOOL bSuppress;
ITEMHDR *hdrItem;
+ ITEM_INFO *lpItem;
+ ITEM_ID *lpID;
INT i, j;
TRACE("()\n");
@@ -5025,13 +5027,20 @@ static BOOL LISTVIEW_DeleteAllItems(LISTVIEW_INFO *infoPtr, BOOL destroy)
{
if (!(infoPtr->dwStyle & LVS_OWNERDATA))
{
- /* send LVN_DELETEITEM notification, if not suppressed
- and if it is not a virtual listview */
- if (!bSuppress) notify_deleteitem(infoPtr, i);
- hdpaSubItems = DPA_GetPtr(infoPtr->hdpaItems, i);
+ /* send LVN_DELETEITEM notification, if not suppressed
+ and if it is not a virtual listview */
+ if (!bSuppress) notify_deleteitem(infoPtr, i);
+ hdpaSubItems = DPA_GetPtr(infoPtr->hdpaItems, i);
+ lpItem = DPA_GetPtr(hdpaSubItems, 0);
+ /* free id struct */
+ j = DPA_GetPtrIndex(infoPtr->hdpaItemIds, lpItem->id);
+ lpID = DPA_GetPtr(infoPtr->hdpaItemIds, j);
+ DPA_DeletePtr(infoPtr->hdpaItemIds, j);
+ Free(lpID);
+ /* both item and subitem start with ITEMHDR header */
for (j = 0; j < DPA_GetPtrCount(hdpaSubItems); j++)
{
- hdrItem = DPA_GetPtr(hdpaSubItems, j);
+ hdrItem = DPA_GetPtr(hdpaSubItems, j);
if (is_textW(hdrItem->pszText)) Free(hdrItem->pszText);
Free(hdrItem);
}
--
1.5.6.5
--=-qaAHzoLgagrEJrLrB/9c--
More information about the wine-patches
mailing list