Xi: swap the control attached to a ChangeDeviceControl request. Bug #14170

Just swapping the request's data isn't enough, we need to swap the actual
control as well.

X.Org Bug 14170 <http://bugs.freedesktop.org/show_bug.cgi?id=14170>
This commit is contained in:
Peter Hutterer 2008-02-27 20:43:50 +10:30
parent aebd9dc252
commit 453661a9e1

View File

@ -77,11 +77,46 @@ int
SProcXChangeDeviceControl(ClientPtr client)
{
char n;
xDeviceCtl *ctl;
xDeviceAbsCalibCtl *calib;
xDeviceAbsAreaCtl *area;
REQUEST(xChangeDeviceControlReq);
swaps(&stuff->length, n);
REQUEST_AT_LEAST_SIZE(xChangeDeviceControlReq);
swaps(&stuff->control, n);
ctl = (xDeviceCtl*)&stuff[1];
swaps(&ctl->control, n);
swaps(&ctl->length, n);
switch(stuff->control) {
case DEVICE_ABS_CALIB:
calib = (xDeviceAbsCalibCtl*)ctl;
swaps(&calib->length, n);
swapl(&calib->min_x, n);
swapl(&calib->max_x, n);
swapl(&calib->min_y, n);
swapl(&calib->max_y, n);
swapl(&calib->flip_x, n);
swapl(&calib->flip_y, n);
swapl(&calib->rotation, n);
swapl(&calib->button_threshold, n);
break;
case DEVICE_ABS_AREA:
area = (xDeviceAbsAreaCtl*)ctl;
swapl(&area->offset_x, n);
swapl(&area->offset_y, n);
swapl(&area->width, n);
swapl(&area->height, n);
swapl(&area->screen, n);
swapl(&area->following, n);
break;
case DEVICE_CORE:
case DEVICE_ENABLE:
case DEVICE_RESOLUTION:
/* hmm. beer. *drool* */
break;
}
return (ProcXChangeDeviceControl(client));
}