[PATCH vmmouse] Deal with opaque InputOption types in ABI 14

Peter Hutterer peter.hutterer at who-t.net
Fri Nov 11 20:08:13 PST 2011


Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
I admit I didn't test this other than compile-test but this should be the
right fix. Thomas, please give this some extra testing, I ran out of time,
sorry.

 src/vmmouse.c |   49 ++++++++++++++++++++++++++++++++++---------------
 1 files changed, 34 insertions(+), 15 deletions(-)

diff --git a/src/vmmouse.c b/src/vmmouse.c
index ad014ec..285ba26 100644
--- a/src/vmmouse.c
+++ b/src/vmmouse.c
@@ -228,11 +228,40 @@ static char reverseMap[32] = { 0,  4,  2,  6,  1,  5,  3,  7,
 #define reverseBits(map, b)	(((b) & ~0x0f) | map[(b) & 0x0f])
 
 #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 14
+
+static InputOption*
+input_option_new(InputOption *list, char *key, char *value)
+{
+   InputOption *new;
+
+   new = calloc(1, sizeof(InputOption));
+   new->key = key;
+   new->value = value;
+   new->next = list;
+   return new;
+}
+
+static void
+input_option_free_list(InputOption **opts)
+{
+   InputOption *tmp = *opts;
+   while(*opts)
+   {
+      tmp = (*opts)->next;
+      free((*opts)->key);
+      free((*opts)->value);
+      free((*opts));
+      *opts = tmp;
+   }
+}
+#endif
+
 static int
 VMMouseInitPassthru(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
 {
    InputAttributes *attrs = NULL;
-   InputOption *input_options = NULL, *tmp, *opts;
+   InputOption *input_options = NULL;
    pointer options;
    DeviceIntPtr dev;
    int rc;
@@ -241,25 +270,15 @@ VMMouseInitPassthru(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
    options = xf86ReplaceStrOption(options, "Driver", "mouse");
 
    while(options) {
-      tmp = calloc(1, sizeof(InputOption));
-      tmp->key = xf86OptionName(options);
-      tmp->value = xf86OptionValue(options);
-      tmp->next = input_options;
-      input_options = tmp;
+      input_options = input_option_new(input_options,
+                                       xf86OptionName(options),
+                                       xf86OptionValue(options));
       options = xf86NextOption(options);
    }
 
    rc = NewInputDeviceRequest(input_options, attrs, &dev);
 
-   opts = input_options;
-   tmp = opts;
-   while(opts) {
-      tmp = opts->next;
-      free(opts->key);
-      free(opts->value);
-      free(opts);
-      opts = tmp;
-   }
+   input_option_free_list(&input_options);
 
    return rc;
 }
-- 
1.7.7.1



More information about the xorg-devel mailing list