xfree86: factor out adding/removing a device from the input device array
No functional changes, just readability improvements. This also gets rid of the count variable. Count was just used for resizing the null-terminated list. Since we're not in a time-critical path here at all we can afford to loop the list multiple times instead of keeping an extra variable around. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Daniel Stone <daniel@fooishbar.org>
This commit is contained in:
parent
5b5477c05f
commit
fa8f465281
|
@ -1068,6 +1068,46 @@ Bool xf86DRI2Enabled(void)
|
||||||
return xf86Info.dri2;
|
return xf86Info.dri2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search for the pInfo in the null-terminated list given and remove (and
|
||||||
|
* free) it if present. All other devices are moved forward.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
freeDevice(InputInfoPtr *list, InputInfoPtr pInfo)
|
||||||
|
{
|
||||||
|
InputInfoPtr *devs;
|
||||||
|
|
||||||
|
for (devs = list; devs && *devs; devs++) {
|
||||||
|
if (*devs == pInfo) {
|
||||||
|
free(*devs);
|
||||||
|
for (; devs && *devs; devs++)
|
||||||
|
devs[0] = devs[1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Append pInfo to the null-terminated list, allocating space as necessary.
|
||||||
|
* pInfo is copied into the last element.
|
||||||
|
*/
|
||||||
|
static InputInfoPtr*
|
||||||
|
addDevice(InputInfoPtr *list, InputInfoPtr pInfo)
|
||||||
|
{
|
||||||
|
InputInfoPtr *devs;
|
||||||
|
int count = 1;
|
||||||
|
|
||||||
|
for (devs = list; devs && *devs; devs++)
|
||||||
|
count++;
|
||||||
|
|
||||||
|
list = xnfrealloc(list, (count + 1) * sizeof(InputInfoPtr));
|
||||||
|
list[count] = NULL;
|
||||||
|
|
||||||
|
list[count - 1] = xnfalloc(sizeof(InputInfoRec));
|
||||||
|
*list[count - 1] = *pInfo;
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Locate the core input devices. These can be specified/located in
|
* Locate the core input devices. These can be specified/located in
|
||||||
* the following ways, in order of priority:
|
* the following ways, in order of priority:
|
||||||
|
@ -1094,7 +1134,6 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
|
||||||
InputInfoRec Pointer = {}, Keyboard = {};
|
InputInfoRec Pointer = {}, Keyboard = {};
|
||||||
XF86ConfInputPtr confInput;
|
XF86ConfInputPtr confInput;
|
||||||
XF86ConfInputRec defPtr, defKbd;
|
XF86ConfInputRec defPtr, defKbd;
|
||||||
int count = 0;
|
|
||||||
MessageType from = X_DEFAULT;
|
MessageType from = X_DEFAULT;
|
||||||
int found = 0;
|
int found = 0;
|
||||||
const char *mousedrivers[] = { "mouse", "synaptics", "evdev", "vmmouse",
|
const char *mousedrivers[] = { "mouse", "synaptics", "evdev", "vmmouse",
|
||||||
|
@ -1119,7 +1158,6 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
|
||||||
coreKeyboard = indp;
|
coreKeyboard = indp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
count++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
confInput = NULL;
|
confInput = NULL;
|
||||||
|
@ -1139,17 +1177,9 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
|
||||||
* removed.
|
* removed.
|
||||||
*/
|
*/
|
||||||
if (corePointer) {
|
if (corePointer) {
|
||||||
for (devs = servlayoutp->inputs; devs && *devs; devs++) {
|
freeDevice(servlayoutp->inputs, corePointer);
|
||||||
if (*devs == corePointer) {
|
corePointer = NULL;
|
||||||
free(*devs);
|
|
||||||
for (; devs && *devs; devs++)
|
|
||||||
devs[0] = devs[1];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
count--;
|
|
||||||
}
|
}
|
||||||
corePointer = NULL;
|
|
||||||
foundPointer = TRUE;
|
foundPointer = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1210,14 +1240,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
|
||||||
Pointer.options = xf86addNewOption(Pointer.options,
|
Pointer.options = xf86addNewOption(Pointer.options,
|
||||||
xnfstrdup("CorePointer"), "on");
|
xnfstrdup("CorePointer"), "on");
|
||||||
Pointer.fd = -1;
|
Pointer.fd = -1;
|
||||||
count++;
|
servlayoutp->inputs = addDevice(servlayoutp->inputs, &Pointer);
|
||||||
devs = xnfrealloc(servlayoutp->inputs,
|
|
||||||
(count + 1) * sizeof(InputInfoPtr));
|
|
||||||
devs[count - 1] = xnfalloc(sizeof(InputInfoRec));
|
|
||||||
devs[count] = NULL;
|
|
||||||
|
|
||||||
*devs[count - 1] = Pointer;
|
|
||||||
servlayoutp->inputs = devs;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1256,14 +1279,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
|
||||||
Pointer.options = xf86addNewOption(NULL,
|
Pointer.options = xf86addNewOption(NULL,
|
||||||
xnfstrdup("AlwaysCore"), "on");
|
xnfstrdup("AlwaysCore"), "on");
|
||||||
Pointer.fd = -1;
|
Pointer.fd = -1;
|
||||||
count++;
|
servlayoutp->inputs = addDevice(servlayoutp->inputs, &Pointer);
|
||||||
devs = xnfrealloc(servlayoutp->inputs,
|
|
||||||
(count + 1) * sizeof(InputInfoPtr));
|
|
||||||
devs[count - 1] = xnfalloc(sizeof(InputInfoRec));
|
|
||||||
devs[count] = NULL;
|
|
||||||
|
|
||||||
*devs[count - 1] = Pointer;
|
|
||||||
servlayoutp->inputs = devs;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1284,17 +1300,9 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
|
||||||
* removed.
|
* removed.
|
||||||
*/
|
*/
|
||||||
if (coreKeyboard) {
|
if (coreKeyboard) {
|
||||||
for (devs = servlayoutp->inputs; devs && *devs; devs++) {
|
freeDevice(servlayoutp->inputs, coreKeyboard);
|
||||||
if (*devs == coreKeyboard) {
|
coreKeyboard = NULL;
|
||||||
free(*devs);
|
|
||||||
for (; devs && *devs; devs++)
|
|
||||||
devs[0] = devs[1];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
count--;
|
|
||||||
}
|
}
|
||||||
coreKeyboard = NULL;
|
|
||||||
foundKeyboard = TRUE;
|
foundKeyboard = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1353,14 +1361,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
|
||||||
Keyboard.options = xf86addNewOption(Keyboard.options,
|
Keyboard.options = xf86addNewOption(Keyboard.options,
|
||||||
xnfstrdup("CoreKeyboard"), "on");
|
xnfstrdup("CoreKeyboard"), "on");
|
||||||
Keyboard.fd = -1;
|
Keyboard.fd = -1;
|
||||||
count++;
|
servlayoutp->inputs = addDevice(servlayoutp->inputs, &Keyboard);
|
||||||
devs = xnfrealloc(servlayoutp->inputs,
|
|
||||||
(count + 1) * sizeof(InputInfoPtr));
|
|
||||||
devs[count - 1] = xnfalloc(sizeof(InputInfoRec));
|
|
||||||
devs[count] = NULL;
|
|
||||||
|
|
||||||
*devs[count - 1] = Keyboard;
|
|
||||||
servlayoutp->inputs = devs;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user