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 <[email protected]>
---
 hw/xfree86/common/xf86Config.c |   93 ++++++++++++++++++++--------------------
 1 files changed, 47 insertions(+), 46 deletions(-)

diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 4a76a2d..0949d16 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -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;
        }
-       corePointer = NULL;
        foundPointer = TRUE;
     }
 
@@ -1209,14 +1239,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool 
implicitLayout)
         if (foundPointer) {
            Pointer.options = xf86addNewOption(Pointer.options,
                                               xnfstrdup("CorePointer"), "on");
-           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);
        }
     }
 
@@ -1254,14 +1277,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool 
implicitLayout)
         if (foundPointer) {
            Pointer.options = xf86addNewOption(NULL,
                                               xnfstrdup("AlwaysCore"), "on");
-           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);
        }
     }
 
@@ -1282,17 +1298,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;
        }
-       coreKeyboard = NULL;
        foundKeyboard = TRUE;
     }
 
@@ -1350,14 +1358,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool 
implicitLayout)
         if (foundKeyboard) {
            Keyboard.options = xf86addNewOption(Keyboard.options,
                                                xnfstrdup("CoreKeyboard"), 
"on");
-           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);
        }
     }
 
-- 
1.7.5.4

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to