summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSascha Hlusiak <saschahlusiak@arcor.de>2011-11-13 17:10:09 +0100
committerSascha Hlusiak <saschahlusiak@arcor.de>2011-11-13 17:10:09 +0100
commit9bbb5775be4e7c72b6d51c20be33f5ed3fb7301a (patch)
treebec71a9354525d6065e0bad0274e325c30d41156
parentb607c4ebeea4122694f02ba87f06e4cdb23114f1 (diff)
parent7ccf3a75292d71104c976bf6afb389cccaac1a7d (diff)
Merge branch 'master' of ssh://git.freedesktop.org/git/xorg/driver/xf86-input-joystick
-rw-r--r--src/jstk_key.c65
1 files changed, 44 insertions, 21 deletions
diff --git a/src/jstk_key.c b/src/jstk_key.c
index d699dcd..a71275a 100644
--- a/src/jstk_key.c
+++ b/src/jstk_key.c
@@ -247,32 +247,62 @@ int jstkKeyboardPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
return Success;
}
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 14
+static InputOption*
+input_option_new(InputOption* list, char *key, char *value)
+{
+ InputOption *tmp;
+
+ tmp = calloc(1, sizeof(*tmp));
+ tmp->key = key;
+ tmp->value = value;
+ tmp->next = list;
+
+ return tmp;
+}
+
+static void
+input_option_free_list(InputOption **list)
+{
+ InputOption *iopts = *list;
+
+ while(iopts)
+ {
+ InputOption *tmp = iopts->next;
+ free(iopts->key);
+ free(iopts->value);
+ free(iopts);
+ iopts = tmp;
+ }
+
+ *list = NULL;
+}
+
+#endif
+
InputInfoPtr
jstkKeyboardHotplug(InputInfoPtr pInfo, int flags)
{
int rc;
char name[512] = {0};
InputAttributes *attrs = NULL;
- InputOption *options;
- InputOption *iopts = NULL, *tmp;
+ InputOption *iopts = NULL;
DeviceIntPtr dev;
+ XF86OptionPtr opts;
/* duplicate option list, append to name */
- options = xf86OptionListDuplicate(pInfo->options);
+ opts = xf86OptionListDuplicate(pInfo->options);
strcpy(name, pInfo->name);
strcat(name, " (keys)");
- options = xf86ReplaceStrOption(options, "Name", name);
- options = xf86ReplaceStrOption(options, "_source", "_driver/joystick");
+ opts = xf86ReplaceStrOption(opts, "Name", name);
+ opts = xf86ReplaceStrOption(opts, "_source", "_driver/joystick");
- while(options)
+ while(opts)
{
- tmp = calloc(1, sizeof(InputOption));
-
- tmp->key = xf86OptionName(options);
- tmp->value = xf86OptionValue(options);
- tmp->next = iopts;
- iopts = tmp;
- options = xf86NextOption(options);
+ iopts = input_option_new(iopts,
+ xf86OptionName(opts),
+ xf86OptionValue(opts));
+ opts = xf86NextOption(opts);
}
/* duplicate attribute list */
@@ -280,14 +310,7 @@ jstkKeyboardHotplug(InputInfoPtr pInfo, int flags)
rc = NewInputDeviceRequest(iopts, attrs, &dev);
- while(iopts)
- {
- tmp = iopts->next;
- free(iopts->key);
- free(iopts->value);
- free(iopts);
- iopts = tmp;
- }
+ input_option_free_list(&iopts);
FreeInputAttributes(attrs);