comctl32: rebar[5/5]: fix lpBand->lpText memory leak in DeleteBand
and simplify the code
Mikołaj Zalewski
mikolaj at zalewski.pl
Sun Feb 4 17:02:27 CST 2007
-------------- next part --------------
From 09e151535a68cb1ef9ccd86948ef22d24e2d4630 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Miko=C5=82aj_Zalewski?= <mikolaj at zalewski.pl>
Date: Sat, 27 Jan 2007 16:23:07 +0100
Subject: [PATCH] comctl32: rebar: fix lpBand->lpText memory leak in DeleteBand and simplify the code
---
dlls/comctl32/rebar.c | 40 ++++++++--------------------------------
1 files changed, 8 insertions(+), 32 deletions(-)
diff --git a/dlls/comctl32/rebar.c b/dlls/comctl32/rebar.c
index 0fc0937..9550eb5 100644
--- a/dlls/comctl32/rebar.c
+++ b/dlls/comctl32/rebar.c
@@ -2649,7 +2649,6 @@ static LRESULT
REBAR_DeleteBand (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{
UINT uBand = (UINT)wParam;
- HWND childhwnd = 0;
REBAR_BAND *lpBand;
if (uBand >= infoPtr->uNumBands)
@@ -2658,39 +2657,16 @@ REBAR_DeleteBand (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
TRACE("deleting band %u!\n", uBand);
lpBand = &infoPtr->bands[uBand];
REBAR_Notify_NMREBAR (infoPtr, uBand, RBN_DELETINGBAND);
+ /* TODO: a return of 1 should probably cancel the deletion */
- if (infoPtr->uNumBands == 1) {
- TRACE(" simple delete!\n");
- if ((lpBand->fMask & RBBIM_CHILD) && lpBand->hwndChild)
- childhwnd = lpBand->hwndChild;
- Free (infoPtr->bands);
- infoPtr->bands = NULL;
- infoPtr->uNumBands = 0;
- }
- else {
- REBAR_BAND *oldBands = infoPtr->bands;
- TRACE("complex delete! [uBand=%u]\n", uBand);
-
- if ((lpBand->fMask & RBBIM_CHILD) && lpBand->hwndChild)
- childhwnd = lpBand->hwndChild;
-
- infoPtr->uNumBands--;
- infoPtr->bands = Alloc (sizeof (REBAR_BAND) * infoPtr->uNumBands);
- if (uBand > 0) {
- memcpy (&infoPtr->bands[0], &oldBands[0],
- uBand * sizeof(REBAR_BAND));
- }
-
- if (uBand < infoPtr->uNumBands) {
- memcpy (&infoPtr->bands[uBand], &oldBands[uBand+1],
- (infoPtr->uNumBands - uBand) * sizeof(REBAR_BAND));
- }
-
- Free (oldBands);
- }
+ if (lpBand->hwndChild)
+ ShowWindow(lpBand->hwndChild, SW_HIDE);
+ Free(lpBand->lpText);
- if (childhwnd)
- ShowWindow (childhwnd, SW_HIDE);
+ infoPtr->uNumBands--;
+ memmove(&infoPtr->bands[uBand], &infoPtr->bands[uBand+1],
+ (infoPtr->uNumBands - uBand) * sizeof(REBAR_BAND));
+ infoPtr->bands = ReAlloc(infoPtr->bands, infoPtr->uNumBands * sizeof(REBAR_BAND));
REBAR_Notify_NMREBAR (infoPtr, -1, RBN_DELETEDBAND);
--
1.4.4.2
More information about the wine-patches
mailing list