From d47e3516daf8cc6cc53f9126e603b31463d072d4 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 5 Jan 2011 18:42:49 +0000 Subject: [PATCH] on feedback from kay sievers, use open() to check for removable media presence SVN revision: 55895 --- legacy/eeze/src/lib/eeze_udev_find.c | 19 ++++++++++++++++++- legacy/eeze/src/lib/eeze_udev_watch.c | 22 +++++++++++++++++----- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/legacy/eeze/src/lib/eeze_udev_find.c b/legacy/eeze/src/lib/eeze_udev_find.c index 05eb4679ad..2e060e7d8a 100644 --- a/legacy/eeze/src/lib/eeze_udev_find.c +++ b/legacy/eeze/src/lib/eeze_udev_find.c @@ -2,6 +2,11 @@ #include "config.h" #endif +#include +#include +#include +#include + #include #include "eeze_udev_private.h" @@ -208,7 +213,6 @@ eeze_udev_find_by_type(Eeze_Udev_Type etype, const char *name) case EEZE_UDEV_TYPE_DRIVE_MOUNTABLE: udev_enumerate_add_match_subsystem(en, "block"); udev_enumerate_add_match_property(en, "ID_FS_USAGE", "filesystem"); - udev_enumerate_add_nomatch_sysattr(en, "capability", "52"); /* parent node */ udev_enumerate_add_nomatch_sysattr(en, "capability", "50"); break; @@ -285,6 +289,19 @@ eeze_udev_find_by_type(Eeze_Udev_Type etype, const char *name) if (!(test = udev_device_get_property_value(device, "ID_USB_DRIVER"))) goto out; } + else if (etype == EEZE_UDEV_TYPE_DRIVE_MOUNTABLE) + { + int devcheck; + + devcheck = open(udev_device_get_devnode(device), O_EXCL); + if (errno) + { + if (devcheck >= 0) close(devcheck); + goto out; + } + if (devcheck < 0) goto out; + close(devcheck); + } if (name && (!strstr(devname, name))) goto out; diff --git a/legacy/eeze/src/lib/eeze_udev_watch.c b/legacy/eeze/src/lib/eeze_udev_watch.c index e8a7b025a4..7f824f722c 100644 --- a/legacy/eeze/src/lib/eeze_udev_watch.c +++ b/legacy/eeze/src/lib/eeze_udev_watch.c @@ -2,6 +2,11 @@ #include "config.h" #endif +#include +#include +#include +#include + #include #include #include "eeze_udev_private.h" @@ -128,11 +133,18 @@ _get_syspath_from_watch(void *data, Ecore_Fd_Handler * fd_handler) test = udev_device_get_sysattr_value(device, "capability"); if (test) - cap = atoi(test); + cap = strtol(test, NULL, 10); if (!(test = (udev_device_get_property_value(device, "ID_FS_USAGE"))) || - (strcmp("filesystem", test)) || (cap == 52) || (cap == 50)) + (strcmp("filesystem", test)) || (cap == 50)) goto error; + { + int devcheck; + + devcheck = open(udev_device_get_devnode(device), O_EXCL); + if ((devcheck < 0) || errno) goto error; + close(devcheck); + } break; case EEZE_UDEV_TYPE_DRIVE_INTERNAL: @@ -144,7 +156,7 @@ _get_syspath_from_watch(void *data, Ecore_Fd_Handler * fd_handler) if (!(test = udev_device_get_property_value(device, "ID_BUS")) || (strcmp("ata", test)) || !(test = udev_device_get_sysattr_value(device, "removable")) - || (atoi(test))) + || (strtol(test, NULL, 10))) goto error; break; @@ -155,9 +167,9 @@ _get_syspath_from_watch(void *data, Ecore_Fd_Handler * fd_handler) goto error; #endif if ((!(test = udev_device_get_sysattr_value(device, "removable")) - || (!atoi(test))) + || (!strtol(test, NULL, 10))) && (!(test = udev_device_get_sysattr_value(device, "capability")) - || (atoi(test) != 10))) + || (strtol(test, NULL, 10) != 10))) goto error; break;