[PATCH 05/12] Xi: add helper functions to alloc/free InputClientPtrs

Chase Douglas chase.douglas at canonical.com
Mon Nov 7 18:01:32 PST 2011


On 11/07/2011 01:39 PM, Peter Hutterer wrote:
> Currently not needed since the InputClientRec is a self-contained struct. As
> part of the touch rework that won't be the case in the future and a function
> to allocate/free memory appropriately is required.
> 
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
>  Xi/exevents.c |   23 ++++++++++++++++++-----
>  1 files changed, 18 insertions(+), 5 deletions(-)
> 
> diff --git a/Xi/exevents.c b/Xi/exevents.c
> index 53db036..7f8e6db 100644
> --- a/Xi/exevents.c
> +++ b/Xi/exevents.c
> @@ -1628,6 +1628,19 @@ SelectForWindow(DeviceIntPtr dev, WindowPtr pWin, ClientPtr client,
>      return Success;
>  }
>  
> +static void
> +FreeInputClient(InputClientsPtr *other)
> +{
> +    free((*other));

I thought double parens has been taboo for quite some time now... why
did you use one here?

> +    *other = NULL;
> +}
> +
> +static InputClientsPtr
> +AllocInputClient(void)
> +{
> +    return calloc(1, sizeof(InputClients));
> +}
> +
>  int
>  AddExtensionClient(WindowPtr pWin, ClientPtr client, Mask mask, int mskidx)
>  {
> @@ -1635,7 +1648,7 @@ AddExtensionClient(WindowPtr pWin, ClientPtr client, Mask mask, int mskidx)
>  
>      if (!pWin->optional && !MakeWindowOptional(pWin))
>  	return BadAlloc;
> -    others = calloc(1, sizeof(InputClients));
> +    others = AllocInputClient();
>      if (!others)
>  	return BadAlloc;
>      if (!pWin->optional->inputMasks && !MakeInputMasks(pWin))
> @@ -1649,7 +1662,7 @@ AddExtensionClient(WindowPtr pWin, ClientPtr client, Mask mask, int mskidx)
>      return Success;
>  
>  bail:
> -    free(others);
> +    FreeInputClient(&others);
>      return BadAlloc;
>  }
>  
> @@ -1721,14 +1734,14 @@ InputClientGone(WindowPtr pWin, XID id)
>  	if (other->resource == id) {
>  	    if (prev) {
>  		prev->next = other->next;
> -		free(other);
> +		FreeInputClient(&other);
>  	    } else if (!(other->next)) {
>  		if (ShouldFreeInputMasks(pWin, TRUE)) {
>  		    wOtherInputMasks(pWin)->inputClients = other->next;
>  		    free(wOtherInputMasks(pWin));
>  		    pWin->optional->inputMasks = (OtherInputMasks *) NULL;
>  		    CheckWindowOptionalNeed(pWin);
> -		    free(other);
> +		    FreeInputClient(&other);
>  		} else {
>  		    other->resource = FakeClientID(0);
>  		    if (!AddResource(other->resource, RT_INPUTCLIENT,
> @@ -1737,7 +1750,7 @@ InputClientGone(WindowPtr pWin, XID id)
>  		}
>  	    } else {
>  		wOtherInputMasks(pWin)->inputClients = other->next;
> -		free(other);
> +		FreeInputClient(&other);
>  	    }
>  	    RecalculateDeviceDeliverableEvents(pWin);
>  	    return Success;



More information about the xorg-devel mailing list