huge bugfix patch for eeze 1.0 stuff: I fubared disk detection pretty hard initially, I think this fixes it all

SVN revision: 59458
This commit is contained in:
Mike Blumenkrantz 2011-05-17 00:14:44 +00:00
parent 89df67bbc2
commit 1fb3a2469b
5 changed files with 43 additions and 55 deletions

View File

@ -194,10 +194,10 @@ main()
type = eeze_udev_find_unlisted_similar(type); type = eeze_udev_find_unlisted_similar(type);
EINA_LIST_FREE(type, name) /* get a property using the device's syspath */ EINA_LIST_FREE(type, name) /* get a property using the device's syspath */
{ {
if ((check = eeze_udev_syspath_get_property(name, "ID_MODEL"))) if ((check = eeze_udev_syspath_get_sysattr(name, "model")))
{ {
check2 = eeze_udev_syspath_get_property(name, "ID_BUS"); check2 = eeze_udev_syspath_get_subsystem(name);
printf("\tOoh, a %s attached on your %s bus!\n", check, check2); printf("\tOoh, a %s attached to the %s subsytem!\n", check, check2);
eina_stringshare_del(check); eina_stringshare_del(check);
eina_stringshare_del(check2); eina_stringshare_del(check2);
} }

View File

@ -292,6 +292,8 @@ EAPI Eina_List *eeze_udev_find_similar_from_syspath(const char *syspath);
* This function will update @p list to include all devices matching * This function will update @p list to include all devices matching
* devices with syspaths currently stored in @p list. All strings are * devices with syspaths currently stored in @p list. All strings are
* stringshared. * stringshared.
*
* @note This is an expensive call, do not use it unless you must.
*/ */
EAPI Eina_List *eeze_udev_find_unlisted_similar(Eina_List *list); EAPI Eina_List *eeze_udev_find_unlisted_similar(Eina_List *list);

View File

@ -96,18 +96,28 @@ eeze_udev_find_unlisted_similar(Eina_List *list)
if ((vendor = udev_device_get_property_value(device, "ID_VENDOR_ID"))) if ((vendor = udev_device_get_property_value(device, "ID_VENDOR_ID")))
udev_enumerate_add_match_property(en, "ID_VENDOR_ID", vendor); udev_enumerate_add_match_property(en, "ID_VENDOR_ID", vendor);
else else if ((vendor = udev_device_get_property_value(device, "ID_VENDOR")))
if ((vendor = udev_device_get_property_value(device, "ID_VENDOR")))
udev_enumerate_add_match_property(en, "ID_VENDOR", vendor); udev_enumerate_add_match_property(en, "ID_VENDOR", vendor);
else if ((vendor = udev_device_get_sysattr_value(device, "vendor")))
udev_enumerate_add_match_sysattr(en, "vendor", vendor);
else if ((vendor = udev_device_get_sysattr_value(device, "manufacturer")))
udev_enumerate_add_match_sysattr(en, "manufacturer", vendor);
if ((model = udev_device_get_property_value(device, "ID_MODEL_ID"))) if ((model = udev_device_get_property_value(device, "ID_MODEL_ID")))
udev_enumerate_add_match_property(en, "ID_MODEL_ID", model); udev_enumerate_add_match_property(en, "ID_MODEL_ID", model);
else else if ((model = udev_device_get_property_value(device, "ID_MODEL")))
if ((model = udev_device_get_property_value(device, "ID_MODEL")))
udev_enumerate_add_match_property(en, "ID_MODEL", model); udev_enumerate_add_match_property(en, "ID_MODEL", model);
else if ((model = udev_device_get_sysattr_value(device, "model")))
udev_enumerate_add_match_sysattr(en, "model", model);
else if ((model = udev_device_get_sysattr_value(device, "product")))
udev_enumerate_add_match_sysattr(en, "product", model);
if ((revision = udev_device_get_property_value(device, "ID_REVISION"))) if ((revision = udev_device_get_property_value(device, "ID_REVISION")))
udev_enumerate_add_match_property(en, "ID_REVISION", revision); udev_enumerate_add_match_property(en, "ID_REVISION", revision);
else if ((revision = udev_device_get_sysattr_value(device, "revision")))
udev_enumerate_add_match_sysattr(en, "revision", revision);
udev_enumerate_add_match_subsystem(en, udev_device_get_subsystem(device));
udev_enumerate_scan_devices(en); udev_enumerate_scan_devices(en);
udev_device_unref(device); udev_device_unref(device);
@ -137,7 +147,7 @@ eeze_udev_find_by_type(Eeze_Udev_Type etype,
_udev_enumerate *en; _udev_enumerate *en;
_udev_list_entry *devs, *cur; _udev_list_entry *devs, *cur;
_udev_device *device, *parent; _udev_device *device, *parent;
const char *devname, *test; const char *devname;
Eina_List *ret = NULL; Eina_List *ret = NULL;
if ((!etype) && (!name)) if ((!etype) && (!name))
@ -181,8 +191,6 @@ eeze_udev_find_by_type(Eeze_Udev_Type etype,
case EEZE_UDEV_TYPE_DRIVE_MOUNTABLE: case EEZE_UDEV_TYPE_DRIVE_MOUNTABLE:
udev_enumerate_add_match_subsystem(en, "block"); udev_enumerate_add_match_subsystem(en, "block");
udev_enumerate_add_match_property(en, "ID_FS_USAGE", "filesystem"); udev_enumerate_add_match_property(en, "ID_FS_USAGE", "filesystem");
/* parent node */
udev_enumerate_add_nomatch_sysattr(en, "capability", "50");
break; break;
case EEZE_UDEV_TYPE_DRIVE_INTERNAL: case EEZE_UDEV_TYPE_DRIVE_INTERNAL:
@ -193,12 +201,11 @@ eeze_udev_find_by_type(Eeze_Udev_Type etype,
break; break;
case EEZE_UDEV_TYPE_DRIVE_REMOVABLE: case EEZE_UDEV_TYPE_DRIVE_REMOVABLE:
udev_enumerate_add_match_subsystem(en, "block"); udev_enumerate_add_match_sysattr(en, "removable", "1");
udev_enumerate_add_match_property(en, "ID_TYPE", "disk"); udev_enumerate_add_match_property(en, "ID_TYPE", "disk");
break; break;
case EEZE_UDEV_TYPE_DRIVE_CDROM: case EEZE_UDEV_TYPE_DRIVE_CDROM:
udev_enumerate_add_match_subsystem(en, "block");
udev_enumerate_add_match_property(en, "ID_CDROM", "1"); udev_enumerate_add_match_property(en, "ID_CDROM", "1");
break; break;
@ -258,21 +265,16 @@ eeze_udev_find_by_type(Eeze_Udev_Type etype,
goto out; goto out;
} }
} }
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) else if (etype == EEZE_UDEV_TYPE_DRIVE_REMOVABLE)
{ {
if (!(test = udev_device_get_property_value(device, "ID_BUS")) || (!strncmp(test, "ata", 3))) /* this yields the actual hw device, not to be confused with the filesystem */
goto out; devname = udev_device_get_syspath(udev_device_get_parent(device));
} }
else if (etype == EEZE_UDEV_TYPE_DRIVE_MOUNTABLE) else if (etype == EEZE_UDEV_TYPE_DRIVE_MOUNTABLE)
{ {
int devcheck; int devcheck;
devcheck = open(udev_device_get_devnode(device), O_RDONLY | O_EXCL); devcheck = open(udev_device_get_devnode(device), O_RDONLY);
if (devcheck < 0) goto out; if (devcheck < 0) goto out;
close(devcheck); close(devcheck);
} }

View File

@ -111,9 +111,13 @@ _get_unlisted_parents(Eina_List *list,
if (!(vendor = udev_device_get_property_value(child, "ID_VENDOR_ID"))) if (!(vendor = udev_device_get_property_value(child, "ID_VENDOR_ID")))
vendor = udev_device_get_property_value(child, "ID_VENDOR"); vendor = udev_device_get_property_value(child, "ID_VENDOR");
if (!vendor) vendor = udev_device_get_sysattr_value(child, "vendor");
if (!vendor) vendor = udev_device_get_sysattr_value(child, "manufacturer");
if (!(model = udev_device_get_property_value(child, "ID_MODEL_ID"))) if (!(model = udev_device_get_property_value(child, "ID_MODEL_ID")))
model = udev_device_get_property_value(child, "ID_MODEL"); model = udev_device_get_property_value(child, "ID_MODEL");
if (!model) model = udev_device_get_sysattr_value(child, "model");
if (!model) model = udev_device_get_sysattr_value(child, "product");
parent = udev_device_get_parent(child); parent = udev_device_get_parent(child);
@ -123,9 +127,13 @@ _get_unlisted_parents(Eina_List *list,
if (!(vendor2 = udev_device_get_property_value(child, "ID_VENDOR_ID"))) if (!(vendor2 = udev_device_get_property_value(child, "ID_VENDOR_ID")))
vendor2 = udev_device_get_property_value(child, "ID_VENDOR"); vendor2 = udev_device_get_property_value(child, "ID_VENDOR");
if (!vendor2) vendor2 = udev_device_get_sysattr_value(child, "vendor");
if (!vendor2) vendor2 = udev_device_get_sysattr_value(child, "manufacturer");
if (!(model2 = udev_device_get_property_value(child, "ID_MODEL_ID"))) if (!(model2 = udev_device_get_property_value(child, "ID_MODEL_ID")))
model2 = udev_device_get_property_value(child, "ID_MODEL"); model2 = udev_device_get_property_value(child, "ID_MODEL");
if (!model2) model2 = udev_device_get_sysattr_value(child, "model");
if (!model2) model2 = udev_device_get_sysattr_value(child, "product");
if ((!model2 && model) || (model2 && !model) || (!vendor2 && vendor) if ((!model2 && model) || (model2 && !model) || (!vendor2 && vendor)
|| (vendor2 && !vendor)) || (vendor2 && !vendor))

View File

@ -48,7 +48,7 @@ _get_syspath_from_watch(void *data,
Eeze_Udev_Watch_Cb func = store->func; Eeze_Udev_Watch_Cb func = store->func;
void *sdata = store->data; void *sdata = store->data;
Eeze_Udev_Watch *watch = store->watch; Eeze_Udev_Watch *watch = store->watch;
int cap = 0, event = 0; int event = 0;
if (!ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_READ)) if (!ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_READ))
return EINA_TRUE; return EINA_TRUE;
@ -171,18 +171,13 @@ _get_syspath_from_watch(void *data,
|| (strcmp(test, "block"))) || (strcmp(test, "block")))
goto error; goto error;
#endif #endif
test = udev_device_get_sysattr_value(device, "capability");
if (test)
cap = strtol(test, NULL, 10);
if (!(test = (udev_device_get_property_value(device, "ID_FS_USAGE"))) || if (!(test = (udev_device_get_property_value(device, "ID_FS_USAGE"))) ||
(strcmp("filesystem", test)) || (cap == 50)) (strcmp("filesystem", test)))
goto error; goto error;
{ {
int devcheck; int devcheck;
devcheck = open(udev_device_get_devnode(device), O_RDONLY | O_EXCL); devcheck = open(udev_device_get_devnode(device), O_RDONLY);
if (devcheck < 0) goto error; if (devcheck < 0) goto error;
close(devcheck); close(devcheck);
} }
@ -190,39 +185,20 @@ _get_syspath_from_watch(void *data,
break; break;
case EEZE_UDEV_TYPE_DRIVE_INTERNAL: case EEZE_UDEV_TYPE_DRIVE_INTERNAL:
#ifdef OLD_UDEV_RRRRRRRRRRRRRR if (udev_device_get_property_value(device, "ID_FS_USAGE")) goto error;
if ((!(test = udev_device_get_subsystem(device))) test = udev_device_get_sysattr_value(device, "removable");
|| (strcmp(test, "block"))) if (test[0] == '1') goto error;
goto error;
#endif
if (!(test = udev_device_get_property_value(device, "ID_BUS"))
|| (strcmp("ata", test))
|| !(test = udev_device_get_sysattr_value(device, "removable"))
|| (strtol(test, NULL, 10)))
goto error;
break; break;
case EEZE_UDEV_TYPE_DRIVE_REMOVABLE: case EEZE_UDEV_TYPE_DRIVE_REMOVABLE:
#ifdef OLD_UDEV_RRRRRRRRRRRRRR if (udev_device_get_property_value(device, "ID_FS_USAGE")) goto error;
if ((!(test = udev_device_get_subsystem(device))) test = udev_device_get_sysattr_value(device, "removable");
|| (strcmp(test, "block"))) if (test[0] == '0') goto error;
goto error;
#endif
if ((!(test = udev_device_get_sysattr_value(device, "removable"))
|| (!strtol(test, NULL, 10)))
&& (!(test = udev_device_get_sysattr_value(device, "capability"))
|| (strtol(test, NULL, 10) != 10)))
goto error;
break; break;
case EEZE_UDEV_TYPE_DRIVE_CDROM: case EEZE_UDEV_TYPE_DRIVE_CDROM:
#ifdef OLD_UDEV_RRRRRRRRRRRRRR
if ((!(test = udev_device_get_subsystem(device)))
|| (strcmp(test, "block")))
goto error;
#endif
if (!udev_device_get_property_value(device, "ID_CDROM")) if (!udev_device_get_property_value(device, "ID_CDROM"))
goto error; goto error;
@ -338,11 +314,11 @@ eeze_udev_watch_add(Eeze_Udev_Type type,
break; break;
case EEZE_UDEV_TYPE_DRIVE_INTERNAL: case EEZE_UDEV_TYPE_DRIVE_INTERNAL:
udev_monitor_filter_add_match_subsystem_devtype(mon, "block", NULL); udev_monitor_filter_add_match_subsystem_devtype(mon, NULL, "disk");
break; break;
case EEZE_UDEV_TYPE_DRIVE_REMOVABLE: case EEZE_UDEV_TYPE_DRIVE_REMOVABLE:
udev_monitor_filter_add_match_subsystem_devtype(mon, "block", NULL); udev_monitor_filter_add_match_subsystem_devtype(mon, NULL, "disk");
break; break;
case EEZE_UDEV_TYPE_DRIVE_CDROM: case EEZE_UDEV_TYPE_DRIVE_CDROM: