From 458c63a84110f64c7fce397a531a3a779c2239a2 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Mon, 7 Aug 2006 23:02:17 +0300 Subject: [PATCH] enable adding devices after removal of a middle device Allow new devices to be added after a device that _wasn't_ the last on the list was removed, by ensuring inputInfo.numDevices always increases, and never decreases. --- Xi/listdev.c | 11 +++++++---- dix/devices.c | 16 +--------------- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/Xi/listdev.c b/Xi/listdev.c index 91e8f2254..02d55ad4c 100644 --- a/Xi/listdev.c +++ b/Xi/listdev.c @@ -96,7 +96,7 @@ int ProcXListInputDevices(register ClientPtr client) { xListInputDevicesReply rep; - int numdevs; + int numdevs = 0; int namesize = 1; /* need 1 extra byte for strcpy */ int size = 0; int total_length; @@ -115,12 +115,15 @@ ProcXListInputDevices(register ClientPtr client) rep.sequenceNumber = client->sequence; AddOtherInputDevices(); - numdevs = inputInfo.numDevices; - for (d = inputInfo.devices; d; d = d->next) + for (d = inputInfo.devices; d; d = d->next) { SizeDeviceInfo(d, &namesize, &size); - for (d = inputInfo.off_devices; d; d = d->next) + numdevs++; + } + for (d = inputInfo.off_devices; d; d = d->next) { SizeDeviceInfo(d, &namesize, &size); + numdevs++; + } total_length = numdevs * sizeof(xDeviceInfo) + size + namesize; devbuf = (char *)xalloc(total_length); diff --git a/dix/devices.c b/dix/devices.c index 1d423e273..69f1e7bcc 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -536,7 +536,7 @@ RemoveDevice(DeviceIntPtr dev) ErrorF("want to remove device %p, kb is %p, pointer is %p\n", dev, inputInfo.keyboard, inputInfo.pointer); #endif - if (!dev) + if (!dev || dev == inputInfo.keyboard || dev == inputInfo.pointer) return BadImplementation; prev = NULL; @@ -550,13 +550,6 @@ RemoveDevice(DeviceIntPtr dev) else prev->next = next; - inputInfo.numDevices--; - - if (inputInfo.keyboard == tmp) - inputInfo.keyboard = NULL; - else if (inputInfo.pointer == tmp) - inputInfo.pointer = NULL; - ret = Success; } } @@ -572,13 +565,6 @@ RemoveDevice(DeviceIntPtr dev) else prev->next = next; - inputInfo.numDevices--; - - if (inputInfo.keyboard == tmp) - inputInfo.keyboard = NULL; - else if (inputInfo.pointer == tmp) - inputInfo.pointer = NULL; - ret = Success; } }