Mikołaj Zalewski : comctl32: rebar: Fix lpBand-> lpText memory leak in DeleteBand and simplify the code.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Feb 5 07:45:01 CST 2007


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

Author: Mikołaj Zalewski <mikolaj at zalewski.pl>
Date:   Mon Feb  5 00:02:27 2007 +0100

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, W
     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);
 




More information about the wine-cvs mailing list