summaryrefslogtreecommitdiff
path: root/udev/lib
diff options
context:
space:
mode:
Diffstat (limited to 'udev/lib')
-rw-r--r--udev/lib/exported_symbols1
-rw-r--r--udev/lib/libudev-enumerate.c58
-rw-r--r--udev/lib/libudev.h3
-rw-r--r--udev/lib/test-libudev.c9
4 files changed, 30 insertions, 41 deletions
diff --git a/udev/lib/exported_symbols b/udev/lib/exported_symbols
index 2711f0b00a..c06148b254 100644
--- a/udev/lib/exported_symbols
+++ b/udev/lib/exported_symbols
@@ -15,6 +15,7 @@ udev_device_get_udev
udev_device_get_syspath
udev_device_get_devpath
udev_device_get_devname
+udev_device_get_sysname
udev_device_get_subsystem
udev_device_get_devlinks
udev_device_get_properties
diff --git a/udev/lib/libudev-enumerate.c b/udev/lib/libudev-enumerate.c
index 458be5861a..b8e4807c47 100644
--- a/udev/lib/libudev-enumerate.c
+++ b/udev/lib/libudev-enumerate.c
@@ -109,43 +109,17 @@ static int devices_delay(struct udev *udev, const char *syspath)
return 0;
}
-static int devices_call(struct udev *udev, const char *syspath,
- int (*cb)(struct udev *udev,
- const char *syspath, const char *subsystem, const char *name,
- void *data),
- void *data,
- int *cb_rc)
-{
- char subsystem[UTIL_PATH_SIZE];
- const char *name;
-
- name = strrchr(syspath, '/');
- if (name == NULL)
- return -1;
- name++;
-
- if (util_get_sys_subsystem(udev, syspath, subsystem, sizeof(subsystem)) < 2)
- return -1;
- *cb_rc = cb(udev, syspath, subsystem, name, data);
- return 0;
-}
-
/**
* udev_enumerate_devices:
- * @udev_device: udev device
- * @cb: function to be called for every property found
+ * @udev: udev library context
+ * @subsystem: the subsystem to enumerate
+ * @cb: function to be called for every device found
* @data: data to be passed to the function
*
- * Retrieve the property key/value pairs belonging to the
- * udev device. For every key/value pair, the passed function will be
- * called. If the function returns 1, remaning properties will be
- * ignored.
- *
- * Returns: the number of properties passed to the caller, or a negative value on error
+ * Returns: the number of devices passed to the caller, or a negative value on error
**/
int udev_enumerate_devices(struct udev *udev, const char *subsystem,
- int (*cb)(struct udev *udev,
- const char *syspath, const char *subsystem, const char *name, void *data),
+ int (*cb)(struct udev_device *udev_device, void *data),
void *data)
{
char base[UTIL_PATH_SIZE];
@@ -171,9 +145,16 @@ int udev_enumerate_devices(struct udev *udev, const char *subsystem,
list_for_each_entry_safe(loop_device, tmp_device, &device_list, node) {
if (devices_delay(udev, loop_device->name))
continue;
- if (cb_rc == 0)
- if (devices_call(udev, loop_device->name, cb, data, &cb_rc) == 0)
+ if (cb_rc == 0) {
+ struct udev_device *device;
+
+ device = udev_device_new_from_syspath(udev, loop_device->name);
+ if (device != NULL) {
+ cb_rc = cb(device, data);
count++;
+ udev_device_unref(device);
+ }
+ }
list_del(&loop_device->node);
free(loop_device->name);
free(loop_device);
@@ -181,9 +162,16 @@ int udev_enumerate_devices(struct udev *udev, const char *subsystem,
/* handle remaining delayed devices */
list_for_each_entry_safe(loop_device, tmp_device, &device_list, node) {
- if (cb_rc == 0)
- if (devices_call(udev, loop_device->name, cb, data, &cb_rc) == 0)
+ if (cb_rc == 0) {
+ struct udev_device *device;
+
+ device = udev_device_new_from_syspath(udev, loop_device->name);
+ if (device != NULL) {
+ cb_rc = cb(device, data);
count++;
+ udev_device_unref(device);
+ }
+ }
list_del(&loop_device->node);
free(loop_device->name);
free(loop_device);
diff --git a/udev/lib/libudev.h b/udev/lib/libudev.h
index 6996b47fa3..78fc137c12 100644
--- a/udev/lib/libudev.h
+++ b/udev/lib/libudev.h
@@ -70,8 +70,7 @@ extern unsigned long long int udev_device_get_seqnum(struct udev_device *udev_de
extern const char *udev_device_get_attr_value(struct udev_device *udev_device, const char *attr);
extern int udev_enumerate_devices(struct udev *udev, const char *subsystem,
- int (*cb)(struct udev *udev,
- const char *syspath, const char *subsystem, const char *name, void *data),
+ int (*cb)(struct udev_device *udev_device, void *data),
void *data);
struct udev_monitor;
diff --git a/udev/lib/test-libudev.c b/udev/lib/test-libudev.c
index 929fd66730..50123f6ec7 100644
--- a/udev/lib/test-libudev.c
+++ b/udev/lib/test-libudev.c
@@ -116,11 +116,12 @@ static int test_device_parents(struct udev *udev, const char *syspath)
return 0;
}
-static int devices_enum_cb(struct udev *udev,
- const char *devpath, const char *subsystem, const char *name,
- void *data)
+static int devices_enum_cb(struct udev_device *device, void *data)
{
- printf("device: '%s' (%s) '%s'\n", devpath, subsystem, name);
+ printf("device: '%s' (%s) '%s'\n",
+ udev_device_get_syspath(device),
+ udev_device_get_subsystem(device),
+ udev_device_get_sysname(device));
return 0;
}