[PATCH v5 8/8] comctl32/listbox: Shrink the item array in a helper function
Huw Davies
huw at codeweavers.com
Thu Nov 22 08:02:25 CST 2018
On Thu, Nov 22, 2018 at 03:44:44PM +0200, Gabriel Ivăncescu wrote:
> Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
> ---
> dlls/comctl32/listbox.c | 33 +++++++++++++++++++--------------
> 1 file changed, 19 insertions(+), 14 deletions(-)
>
> diff --git a/dlls/comctl32/listbox.c b/dlls/comctl32/listbox.c
> index 3b76e19..41eb631 100644
> --- a/dlls/comctl32/listbox.c
> +++ b/dlls/comctl32/listbox.c
> @@ -148,6 +148,24 @@ static BOOL expand_storage(LB_DESCR *descr, UINT amount)
> return TRUE;
> }
>
> +static void shrink_storage(LB_DESCR *descr)
> +{
> + LB_ITEMDATA *p = descr->items;
> + UINT num = descr->nb_items;
> +
> + if (num + LB_ARRAY_GRANULARITY * 2 < descr->array_size)
> + {
> + num += LB_ARRAY_GRANULARITY - 1;
> + num -= num % LB_ARRAY_GRANULARITY;
> + p = HeapReAlloc(GetProcessHeap(), 0, p, num * sizeof(LB_ITEMDATA));
> + if (p)
> + {
> + descr->array_size = num;
> + descr->items = p;
> + }
> + }
> +}
> +
I was hoping for a common allocation function (resize_storage() say),
that would take the length of the required array, not one function to
grow and another to shrink.
Also, let's insist that LB_ARRAY_GRANULARITY is a power of two, to
simplify these adjustments.
Huw.
More information about the wine-devel
mailing list