[PATCH 3/5] cursor: Clean up pointer barrier creation code a tiny bit
Peter Hutterer
peter.hutterer at who-t.net
Sun Nov 4 15:52:30 PST 2012
On Sat, Nov 03, 2012 at 06:39:34PM -0400, Jasper St. Pierre wrote:
> From: "Jasper St. Pierre" <jstpierre at mecheye.net>
>
> This will make it much simpler when we add more error paths to the code
> that constructs pointer barrier clients.
>
> Signed-off-by: Jasper St. Pierre <jstpierre at mecheye.net>
> ---
> xfixes/cursor.c | 54 ++++++++++++++++++++++++++----------------------------
> 1 file changed, 26 insertions(+), 28 deletions(-)
>
> diff --git a/xfixes/cursor.c b/xfixes/cursor.c
> index 9d7c0f0..a34f65c 100644
> --- a/xfixes/cursor.c
> +++ b/xfixes/cursor.c
> @@ -1245,28 +1245,34 @@ CursorConstrainCursorHarder(DeviceIntPtr dev, ScreenPtr screen, int mode,
> }
> }
>
> -static struct PointerBarrierClient *
> +static int
> CreatePointerBarrierClient(ScreenPtr screen, ClientPtr client,
> - xXFixesCreatePointerBarrierReq * stuff)
> + xXFixesCreatePointerBarrierReq * stuff,
> + PointerBarrierClientPtr *client_out)
> {
> CursorScreenPtr cs = GetCursorScreen(screen);
> struct PointerBarrierClient *ret = malloc(sizeof(*ret));
>
> - if (ret) {
> - ret->screen = screen;
> - ret->barrier.x1 = min(stuff->x1, stuff->x2);
> - ret->barrier.x2 = max(stuff->x1, stuff->x2);
> - ret->barrier.y1 = min(stuff->y1, stuff->y2);
> - ret->barrier.y2 = max(stuff->y1, stuff->y2);
> - ret->barrier.directions = stuff->directions & 0x0f;
> - if (barrier_is_horizontal(&ret->barrier))
> - ret->barrier.directions &= ~(BarrierPositiveX | BarrierNegativeX);
> - if (barrier_is_vertical(&ret->barrier))
> - ret->barrier.directions &= ~(BarrierPositiveY | BarrierNegativeY);
> - xorg_list_add(&ret->entry, &cs->barriers);
> + *client_out = NULL;
> +
> + if (!ret) {
> + return BadAlloc;
> }
>
> - return ret;
> + ret->screen = screen;
> + ret->barrier.x1 = min(stuff->x1, stuff->x2);
> + ret->barrier.x2 = max(stuff->x1, stuff->x2);
> + ret->barrier.y1 = min(stuff->y1, stuff->y2);
> + ret->barrier.y2 = max(stuff->y1, stuff->y2);
> + ret->barrier.directions = stuff->directions & 0x0f;
> + if (barrier_is_horizontal(&ret->barrier))
> + ret->barrier.directions &= ~(BarrierPositiveX | BarrierNegativeX);
> + if (barrier_is_vertical(&ret->barrier))
> + ret->barrier.directions &= ~(BarrierPositiveY | BarrierNegativeY);
> + xorg_list_add(&ret->entry, &cs->barriers);
> +
> + *client_out = ret;
> + return Success;
> }
>
> int
> @@ -1279,7 +1285,7 @@ ProcXFixesCreatePointerBarrier(ClientPtr client)
>
> REQUEST(xXFixesCreatePointerBarrierReq);
>
> - REQUEST_FIXED_SIZE(xXFixesCreatePointerBarrierReq, pad_to_int32(stuff->num_devices));
> + REQUEST_SIZE_MATCH(xXFixesCreatePointerBarrierReq);
did you really intend to undo the previous patch?
Cheers,
Peter
> LEGAL_NEW_RESOURCE(stuff->barrier, client);
>
> err = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
> @@ -1304,9 +1310,9 @@ ProcXFixesCreatePointerBarrier(ClientPtr client)
> if (barrier_is_horizontal(&b) && barrier_is_vertical(&b))
> return BadValue;
>
> - if (!(barrier = CreatePointerBarrierClient(pWin->drawable.pScreen,
> - client, stuff)))
> - return BadAlloc;
> + if ((err = CreatePointerBarrierClient(pWin->drawable.pScreen,
> + client, stuff, &barrier)))
> + return err;
>
> if (!AddResource(stuff->barrier, PointerBarrierType, &barrier->barrier))
> return BadAlloc;
> @@ -1318,13 +1324,9 @@ int
> SProcXFixesCreatePointerBarrier(ClientPtr client)
> {
> REQUEST(xXFixesCreatePointerBarrierReq);
> - int i;
> - CARD16 *in_devices = (CARD16 *) &stuff[1];
>
> swaps(&stuff->length);
> - swaps(&stuff->num_devices);
> - REQUEST_FIXED_SIZE(xXFixesCreatePointerBarrierReq, pad_to_int32(stuff->num_devices));
> -
> + REQUEST_SIZE_MATCH(xXFixesCreatePointerBarrierReq);
> swapl(&stuff->barrier);
> swapl(&stuff->window);
> swaps(&stuff->x1);
> @@ -1332,10 +1334,6 @@ SProcXFixesCreatePointerBarrier(ClientPtr client)
> swaps(&stuff->x2);
> swaps(&stuff->y2);
> swapl(&stuff->directions);
> - for (i = 0; i < stuff->num_devices; i++) {
> - swapl(in_devices + i);
> - }
> -
> return ProcXFixesVector[stuff->xfixesReqType] (client);
> }
>
> --
> 1.7.12.1
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>
More information about the xorg-devel
mailing list