static void udev_input_handle_hotplug(udev_input_t *udev) { bool is_keyboard, is_mouse, is_touchpad; struct udev_device *dev = udev_monitor_receive_device(udev->monitor); device_handle_cb cb = NULL; const char *devtype = NULL; const char *val_keyboard = NULL; const char *val_mouse = NULL; const char *val_touchpad = NULL; const char *action = NULL; const char *devnode = NULL; if (!dev) return; val_keyboard = udev_device_get_property_value(dev, "ID_INPUT_KEYBOARD"); val_mouse = udev_device_get_property_value(dev, "ID_INPUT_MOUSE"); val_touchpad = udev_device_get_property_value(dev, "ID_INPUT_TOUCHPAD"); action = udev_device_get_action(dev); devnode = udev_device_get_devnode(dev); is_keyboard = val_keyboard && !strcmp(val_keyboard, "1") && devnode; is_mouse = val_mouse && !strcmp(val_mouse, "1") && devnode; is_touchpad = val_touchpad && !strcmp(val_touchpad, "1") && devnode; if (!is_keyboard && !is_mouse && !is_touchpad) goto end; if (is_keyboard) { cb = udev_handle_keyboard; devtype = "keyboard"; } else if (is_touchpad) { cb = udev_handle_touchpad; devtype = "touchpad"; } else if (is_mouse) { cb = udev_handle_mouse; devtype = "mouse"; } if (!strcmp(action, "add")) { RARCH_LOG("[udev]: Hotplug add %s: %s.\n", devtype, devnode); add_device(udev, devnode, cb); } else if (!strcmp(action, "remove")) { RARCH_LOG("[udev]: Hotplug remove %s: %s.\n", devtype, devnode); udev_input_remove_device(udev, devnode); } end: udev_device_unref(dev); }
static void udev_input_handle_hotplug(udev_input_t *udev) { const char *devtype = NULL; const char *val_keyboard = NULL; const char *val_mouse = NULL; const char *val_touchpad = NULL; const char *action = NULL; const char *devnode = NULL; struct udev_device *dev = udev_monitor_receive_device(udev->monitor); if (!dev) return; val_keyboard = udev_device_get_property_value(dev, "ID_INPUT_KEYBOARD"); val_mouse = udev_device_get_property_value(dev, "ID_INPUT_MOUSE"); val_touchpad = udev_device_get_property_value(dev, "ID_INPUT_TOUCHPAD"); action = udev_device_get_action(dev); devnode = udev_device_get_devnode(dev); if (val_keyboard && string_is_equal_fast(val_keyboard, "1", 1) && devnode) devtype = "keyboard"; if (val_mouse && string_is_equal_fast(val_mouse, "1", 1) && devnode) devtype = "mouse"; if (val_touchpad && string_is_equal_fast(val_touchpad, "1", 1) && devnode) devtype = "touchpad"; if (!devtype) goto end; if (string_is_equal_fast(action, "add", 3)) { device_handle_cb cb = NULL; if (string_is_equal_fast(devtype, "keyboard", 8)) cb = udev_handle_keyboard; else if (string_is_equal_fast(devtype, "touchpad", 8)) cb = udev_handle_touchpad; else if (string_is_equal_fast(devtype, "mouse", 5)) cb = udev_handle_mouse; RARCH_LOG("[udev]: Hotplug add %s: %s.\n", devtype, devnode); udev_input_add_device(udev, devnode, cb); } else if (string_is_equal_fast(action, "remove", 6)) { RARCH_LOG("[udev]: Hotplug remove %s: %s.\n", devtype, devnode); udev_input_remove_device(udev, devnode); } end: udev_device_unref(dev); }