diff --git a/legacy/eeze/src/lib/udev/eeze_udev.c b/legacy/eeze/src/lib/udev/eeze_udev.c index a813f013ef..7d69f364de 100644 --- a/legacy/eeze/src/lib/udev/eeze_udev.c +++ b/legacy/eeze/src/lib/udev/eeze_udev.c @@ -452,6 +452,7 @@ eeze_udev_syspath_is_touchpad(const char *syspath) #ifdef OLD_UDEV_RRRRRRRRRRRRRR touchpad = _walk_parents_test_attr(device, "resolution", NULL); #else + const char *test; test = udev_device_get_property_value(device, "ID_INPUT_TOUCHPAD"); if (test) touchpad = atoi(test); #endif diff --git a/legacy/eeze/src/lib/udev/eeze_udev_find.c b/legacy/eeze/src/lib/udev/eeze_udev_find.c index e781a683ec..4e6579dd2b 100644 --- a/legacy/eeze/src/lib/udev/eeze_udev_find.c +++ b/legacy/eeze/src/lib/udev/eeze_udev_find.c @@ -220,7 +220,6 @@ eeze_udev_find_by_type(const Eeze_Udev_Type etype, const char *name) case EEZE_UDEV_TYPE_DRIVE_REMOVABLE: udev_enumerate_add_match_subsystem(en, "block"); udev_enumerate_add_match_property(en, "ID_TYPE", "disk"); - udev_enumerate_add_match_sysattr(en, "removable", "1"); break; case EEZE_UDEV_TYPE_DRIVE_CDROM: udev_enumerate_add_match_subsystem(en, "block"); @@ -274,6 +273,17 @@ eeze_udev_find_by_type(const Eeze_Udev_Type etype, const char *name) } } + else if (etype == EEZE_UDEV_TYPE_DRIVE_INTERNAL) + { + if (udev_device_get_property_value(device, "ID_USB_DRIVER")) + goto out; + } + else if (etype == EEZE_UDEV_TYPE_DRIVE_REMOVABLE) + { + if (!(test = udev_device_get_property_value(device, "ID_USB_DRIVER"))) + goto out; + } + if (name) if (!strstr(devname, name)) goto out; diff --git a/legacy/eeze/src/lib/udev/eeze_udev_private.c b/legacy/eeze/src/lib/udev/eeze_udev_private.c index 6569dc39fb..f44cd31c84 100644 --- a/legacy/eeze/src/lib/udev/eeze_udev_private.c +++ b/legacy/eeze/src/lib/udev/eeze_udev_private.c @@ -32,6 +32,24 @@ _walk_parents_test_attr(struct udev_device *device, const char *sysattr, const c return 0; } +const char * +_walk_parents_get_attr(struct udev_device *device, const char *sysattr) +{ + struct udev_device *parent, *child = device; + const char *test; + + if ((test = udev_device_get_sysattr_value(device, sysattr))) + return eina_stringshare_add(test); + parent = udev_device_get_parent(child); + for (; parent; child = parent, parent = udev_device_get_parent(child)) + { + if ((test = udev_device_get_sysattr_value(parent, sysattr))) + return eina_stringshare_add(test); + } + + return NULL; +} + /** * check a list for all parents of a device, * stringshare adding all devices that are not in the list diff --git a/legacy/eeze/src/lib/udev/eeze_udev_private.h b/legacy/eeze/src/lib/udev/eeze_udev_private.h index 493a2123a6..db8d8966e6 100644 --- a/legacy/eeze/src/lib/udev/eeze_udev_private.h +++ b/legacy/eeze/src/lib/udev/eeze_udev_private.h @@ -23,8 +23,8 @@ extern int _e_eeze_udev_log_dom; #define WARN(...) EINA_LOG_DOM_WARN(_e_eeze_udev_log_dom, __VA_ARGS__) #define ERR(...) EINA_LOG_DOM_ERR(_e_eeze_udev_log_dom, __VA_ARGS__) -/* from watch.c */ Eina_Bool _walk_parents_test_attr(struct udev_device *device, const char *sysattr, const char* value); +const char *_walk_parents_get_attr(struct udev_device *device, const char *sysattr); void _get_unlisted_parents(Eina_List *list, struct udev_device *device); #endif