config/udev: consider ID_INPUT_FOO=0 as 'unset'

Historically we didn't need to care about this case but more devices are
having invalid types set and they cannot be unset with a hwdb entry (which
doesn't handle the empty string). Allow for "0" to mean "unset" because
anything else would be crazy anyway.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2017-09-26 15:21:59 +10:00
parent d5379b350f
commit 5aad81445c

View File

@ -134,7 +134,8 @@ device_added(struct udev_device *udev_device)
} }
#endif #endif
if (!udev_device_get_property_value(udev_device, "ID_INPUT")) { value = udev_device_get_property_value(udev_device, "ID_INPUT");
if (value && !strcmp(value, "0")) {
LogMessageVerb(X_INFO, 10, LogMessageVerb(X_INFO, 10,
"config/udev: ignoring device %s without " "config/udev: ignoring device %s without "
"property ID_INPUT set\n", path); "property ID_INPUT set\n", path);
@ -237,38 +238,36 @@ device_added(struct udev_device *udev_device)
else if (!strcmp(key, "ID_VENDOR")) { else if (!strcmp(key, "ID_VENDOR")) {
LOG_PROPERTY(path, key, value); LOG_PROPERTY(path, key, value);
attrs.vendor = strdup(value); attrs.vendor = strdup(value);
} } else if (!strncmp(key, "ID_INPUT_", 9)) {
else if (!strcmp(key, "ID_INPUT_KEY")) { const struct pfmap {
LOG_PROPERTY(path, key, value); const char *property;
attrs.flags |= ATTR_KEY; unsigned int flag;
} } map[] = {
else if (!strcmp(key, "ID_INPUT_KEYBOARD")) { { "ID_INPUT_KEY", ATTR_KEY },
LOG_PROPERTY(path, key, value); { "ID_INPUT_KEYBOARD", ATTR_KEYBOARD },
attrs.flags |= ATTR_KEYBOARD; { "ID_INPUT_MOUSE", ATTR_POINTER },
} { "ID_INPUT_JOYSTICK", ATTR_JOYSTICK },
else if (!strcmp(key, "ID_INPUT_MOUSE")) { { "ID_INPUT_TABLET", ATTR_TABLET },
LOG_PROPERTY(path, key, value); { "ID_INPUT_TABLET_PAD", ATTR_TABLET_PAD },
attrs.flags |= ATTR_POINTER; { "ID_INPUT_TOUCHPAD", ATTR_TOUCHPAD },
} { "ID_INPUT_TOUCHSCREEN", ATTR_TOUCHSCREEN },
else if (!strcmp(key, "ID_INPUT_JOYSTICK")) { { NULL, 0 },
LOG_PROPERTY(path, key, value); };
attrs.flags |= ATTR_JOYSTICK;
} /* Anything but the literal string "0" is considered a
else if (!strcmp(key, "ID_INPUT_TABLET")) { * boolean true. The empty string isn't a thing with udev
LOG_PROPERTY(path, key, value); * properties anyway */
attrs.flags |= ATTR_TABLET; if (value && strcmp(value, "0")) {
} const struct pfmap *m = map;
else if (!strcmp(key, "ID_INPUT_TABLET_PAD")) {
LOG_PROPERTY(path, key, value); while (m->property != NULL) {
attrs.flags |= ATTR_TABLET_PAD; if (!strcmp(m->property, key)) {
} LOG_PROPERTY(path, key, value);
else if (!strcmp(key, "ID_INPUT_TOUCHPAD")) { attrs.flags |= m->flag;
LOG_PROPERTY(path, key, value); }
attrs.flags |= ATTR_TOUCHPAD; m++;
} }
else if (!strcmp(key, "ID_INPUT_TOUCHSCREEN")) { }
LOG_PROPERTY(path, key, value);
attrs.flags |= ATTR_TOUCHSCREEN;
} }
} }