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