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:
parent
89df67bbc2
commit
1fb3a2469b
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue