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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 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
 | 
			
		||||
 * the following ways, in order of priority:
 | 
			
		||||
| 
						 | 
				
			
			@ -1094,7 +1134,6 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
 | 
			
		|||
    InputInfoRec Pointer = {}, Keyboard = {};
 | 
			
		||||
    XF86ConfInputPtr confInput;
 | 
			
		||||
    XF86ConfInputRec defPtr, defKbd;
 | 
			
		||||
    int count = 0;
 | 
			
		||||
    MessageType from = X_DEFAULT;
 | 
			
		||||
    int found = 0;
 | 
			
		||||
    const char *mousedrivers[] = { "mouse", "synaptics", "evdev", "vmmouse",
 | 
			
		||||
| 
						 | 
				
			
			@ -1119,7 +1158,6 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
 | 
			
		|||
		coreKeyboard = indp;
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
	count++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    confInput = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -1139,17 +1177,9 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
 | 
			
		|||
	 * removed.
 | 
			
		||||
	 */
 | 
			
		||||
	if (corePointer) {
 | 
			
		||||
	    for (devs = servlayoutp->inputs; devs && *devs; devs++) {
 | 
			
		||||
		if (*devs == corePointer) {
 | 
			
		||||
		    free(*devs);
 | 
			
		||||
		    for (; devs && *devs; devs++)
 | 
			
		||||
			devs[0] = devs[1];
 | 
			
		||||
		    break;
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
	    count--;
 | 
			
		||||
	}
 | 
			
		||||
	    freeDevice(servlayoutp->inputs, corePointer);
 | 
			
		||||
	    corePointer = NULL;
 | 
			
		||||
	}
 | 
			
		||||
	foundPointer = TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1210,14 +1240,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
 | 
			
		|||
	    Pointer.options = xf86addNewOption(Pointer.options,
 | 
			
		||||
					       xnfstrdup("CorePointer"), "on");
 | 
			
		||||
	    Pointer.fd = -1;
 | 
			
		||||
	    count++;
 | 
			
		||||
	    devs = xnfrealloc(servlayoutp->inputs,
 | 
			
		||||
			      (count + 1) * sizeof(InputInfoPtr));
 | 
			
		||||
            devs[count - 1] = xnfalloc(sizeof(InputInfoRec));
 | 
			
		||||
	    devs[count] = NULL;
 | 
			
		||||
 | 
			
		||||
	    *devs[count - 1] = Pointer;
 | 
			
		||||
	    servlayoutp->inputs = devs;
 | 
			
		||||
	    servlayoutp->inputs = addDevice(servlayoutp->inputs, &Pointer);
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1256,14 +1279,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
 | 
			
		|||
	    Pointer.options = xf86addNewOption(NULL,
 | 
			
		||||
					       xnfstrdup("AlwaysCore"), "on");
 | 
			
		||||
	    Pointer.fd = -1;
 | 
			
		||||
	    count++;
 | 
			
		||||
	    devs = xnfrealloc(servlayoutp->inputs,
 | 
			
		||||
			      (count + 1) * sizeof(InputInfoPtr));
 | 
			
		||||
            devs[count - 1] = xnfalloc(sizeof(InputInfoRec));
 | 
			
		||||
	    devs[count] = NULL;
 | 
			
		||||
 | 
			
		||||
	    *devs[count - 1] = Pointer;
 | 
			
		||||
	    servlayoutp->inputs = devs;
 | 
			
		||||
	    servlayoutp->inputs = addDevice(servlayoutp->inputs, &Pointer);
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1284,17 +1300,9 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
 | 
			
		|||
	 * removed.
 | 
			
		||||
	 */
 | 
			
		||||
	if (coreKeyboard) {
 | 
			
		||||
	    for (devs = servlayoutp->inputs; devs && *devs; devs++) {
 | 
			
		||||
		if (*devs == coreKeyboard) {
 | 
			
		||||
		    free(*devs);
 | 
			
		||||
		    for (; devs && *devs; devs++)
 | 
			
		||||
			devs[0] = devs[1];
 | 
			
		||||
		    break;
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
	    count--;
 | 
			
		||||
	}
 | 
			
		||||
	    freeDevice(servlayoutp->inputs, coreKeyboard);
 | 
			
		||||
	    coreKeyboard = NULL;
 | 
			
		||||
	}
 | 
			
		||||
	foundKeyboard = TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1353,14 +1361,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
 | 
			
		|||
	    Keyboard.options = xf86addNewOption(Keyboard.options,
 | 
			
		||||
						xnfstrdup("CoreKeyboard"), "on");
 | 
			
		||||
	    Keyboard.fd = -1;
 | 
			
		||||
	    count++;
 | 
			
		||||
	    devs = xnfrealloc(servlayoutp->inputs,
 | 
			
		||||
			      (count + 1) * sizeof(InputInfoPtr));
 | 
			
		||||
            devs[count - 1] = xnfalloc(sizeof(InputInfoRec));
 | 
			
		||||
	    devs[count] = NULL;
 | 
			
		||||
 | 
			
		||||
	    *devs[count - 1] = Keyboard;
 | 
			
		||||
	    servlayoutp->inputs = devs;
 | 
			
		||||
	    servlayoutp->inputs = addDevice(servlayoutp->inputs, &Keyboard);
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue