diff --git a/Xi/extinit.c b/Xi/extinit.c index ad052cb0cc..24500e9e0a 100644 --- a/Xi/extinit.c +++ b/Xi/extinit.c @@ -474,7 +474,7 @@ SProcIDispatch(ClientPtr client) case X_XIGetSelectedEvents: return SProcXIGetSelectedEvents(client); case X_XIBarrierReleasePointer: - return SProcXIBarrierReleasePointer(client); + return ProcXIBarrierReleasePointer(client); default: return BadRequest; } diff --git a/Xi/handlers.h b/Xi/handlers.h index b1fb641e7c..c84420db35 100644 --- a/Xi/handlers.h +++ b/Xi/handlers.h @@ -69,7 +69,6 @@ int ProcXUngrabDeviceButton(ClientPtr client); int ProcXUngrabDevice(ClientPtr client); int ProcXUngrabDeviceKey(ClientPtr client); -int SProcXIBarrierReleasePointer(ClientPtr client); int SProcXIGetClientPointer(ClientPtr client); int SProcXIGetSelectedEvents(ClientPtr client); int SProcXIPassiveGrabDevice(ClientPtr client); diff --git a/Xi/xibarriers.c b/Xi/xibarriers.c index 5e1471f4a4..ae9b7a8fd2 100644 --- a/Xi/xibarriers.c +++ b/Xi/xibarriers.c @@ -850,45 +850,34 @@ XIDestroyPointerBarrier(ClientPtr client, return Success; } -int _X_COLD -SProcXIBarrierReleasePointer(ClientPtr client) +int +ProcXIBarrierReleasePointer(ClientPtr client) { - xXIBarrierReleasePointerInfo *info; REQUEST(xXIBarrierReleasePointerReq); - int i; - REQUEST_AT_LEAST_SIZE(xXIBarrierReleasePointerReq); - swapl(&stuff->num_barriers); + if (client->swapped) + swapl(&stuff->num_barriers); + if (stuff->num_barriers > UINT32_MAX / sizeof(xXIBarrierReleasePointerInfo)) return BadLength; REQUEST_FIXED_SIZE(xXIBarrierReleasePointerReq, stuff->num_barriers * sizeof(xXIBarrierReleasePointerInfo)); - info = (xXIBarrierReleasePointerInfo*) &stuff[1]; - for (i = 0; i < stuff->num_barriers; i++, info++) { - swaps(&info->deviceid); - swapl(&info->barrier); - swapl(&info->eventid); + if (client->swapped) { + xXIBarrierReleasePointerInfo *info = (xXIBarrierReleasePointerInfo*) &stuff[1]; + for (int i = 0; i < stuff->num_barriers; i++, info++) { + swaps(&info->deviceid); + swapl(&info->barrier); + swapl(&info->eventid); + } } - return (ProcXIBarrierReleasePointer(client)); -} - -int -ProcXIBarrierReleasePointer(ClientPtr client) -{ int i; int err; struct PointerBarrierClient *barrier; struct PointerBarrier *b; xXIBarrierReleasePointerInfo *info; - REQUEST(xXIBarrierReleasePointerReq); - REQUEST_AT_LEAST_SIZE(xXIBarrierReleasePointerReq); - if (stuff->num_barriers > UINT32_MAX / sizeof(xXIBarrierReleasePointerInfo)) - return BadLength; - REQUEST_FIXED_SIZE(xXIBarrierReleasePointerReq, stuff->num_barriers * sizeof(xXIBarrierReleasePointerInfo)); - info = (xXIBarrierReleasePointerInfo*) &stuff[1]; for (i = 0; i < stuff->num_barriers; i++, info++) { struct PointerBarrierDevice *pbd;