diff --git a/legacy/eeze/ChangeLog b/legacy/eeze/ChangeLog index 1c51a6f219..02384a11d7 100644 --- a/legacy/eeze/ChangeLog +++ b/legacy/eeze/ChangeLog @@ -42,3 +42,6 @@ * fixed eeze_udev_find_unlisted_similar to be less permissive * added EEZE_EVENT_DISK_EJECT and eeze_disk_eject, functions for ejecting a disk +2011-06-29 Mike Blumenkrantz (discomfitor/zmike) + * fixed bug where EEZE_UDEV_EVENT_NONE would not match all events for watches + * fixed segv when detecting removable drives diff --git a/legacy/eeze/src/lib/eeze_udev_watch.c b/legacy/eeze/src/lib/eeze_udev_watch.c index 19d3413918..03bbabbfc4 100644 --- a/legacy/eeze/src/lib/eeze_udev_watch.c +++ b/legacy/eeze/src/lib/eeze_udev_watch.c @@ -66,39 +66,40 @@ _get_syspath_from_watch(void *data, { if (!strcmp(test, "add")) { - if ((store->event & EEZE_UDEV_EVENT_ADD) != EEZE_UDEV_EVENT_ADD) + if ((store->event != EEZE_UDEV_EVENT_NONE) && + ((store->event & EEZE_UDEV_EVENT_ADD) != EEZE_UDEV_EVENT_ADD)) goto error; event |= EEZE_UDEV_EVENT_ADD; } else if (!strcmp(test, "remove")) { - if ((store->event & EEZE_UDEV_EVENT_REMOVE) != - EEZE_UDEV_EVENT_REMOVE) + if ((store->event != EEZE_UDEV_EVENT_NONE) && + ((store->event & EEZE_UDEV_EVENT_REMOVE) != EEZE_UDEV_EVENT_REMOVE)) goto error; event |= EEZE_UDEV_EVENT_REMOVE; } else if (!strcmp(test, "change")) { - if ((store->event & EEZE_UDEV_EVENT_CHANGE) != - EEZE_UDEV_EVENT_CHANGE) + if ((store->event != EEZE_UDEV_EVENT_NONE) && + ((store->event & EEZE_UDEV_EVENT_CHANGE) != EEZE_UDEV_EVENT_CHANGE)) goto error; event |= EEZE_UDEV_EVENT_CHANGE; } else if (!strcmp(test, "online")) { - if ((store->event & EEZE_UDEV_EVENT_ONLINE) != - EEZE_UDEV_EVENT_ONLINE) + if ((store->event != EEZE_UDEV_EVENT_NONE) && + ((store->event & EEZE_UDEV_EVENT_ONLINE) != EEZE_UDEV_EVENT_ONLINE)) goto error; event |= EEZE_UDEV_EVENT_ONLINE; } else { - if ((store->event & EEZE_UDEV_EVENT_OFFLINE) != - EEZE_UDEV_EVENT_OFFLINE) + if ((store->event != EEZE_UDEV_EVENT_NONE) && + ((store->event & EEZE_UDEV_EVENT_OFFLINE) != EEZE_UDEV_EVENT_OFFLINE)) goto error; event |= EEZE_UDEV_EVENT_OFFLINE; @@ -187,14 +188,14 @@ _get_syspath_from_watch(void *data, case EEZE_UDEV_TYPE_DRIVE_INTERNAL: if (udev_device_get_property_value(device, "ID_FS_USAGE")) goto error; test = udev_device_get_sysattr_value(device, "removable"); - if (test[0] == '1') goto error; + if (test && test[0] == '1') goto error; break; case EEZE_UDEV_TYPE_DRIVE_REMOVABLE: if (udev_device_get_property_value(device, "ID_FS_USAGE")) goto error; test = udev_device_get_sysattr_value(device, "removable"); - if (test[0] == '0') goto error; + if ((!test) || (test[0] == '0')) goto error; break;