mirror of
https://github.com/libratbag/libratbag.git
synced 2026-11-07 23:23:52 +01:00
ratbagd: add device iterator
Add iterators for ratbagd_device objects. Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
This commit is contained in:
@@ -347,11 +347,30 @@ struct ratbagd_device *ratbagd_device_lookup(struct ratbagd *ctx,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct ratbagd_device *ratbagd_device_first(struct ratbagd *ctx)
|
||||
{
|
||||
struct RBNode *node;
|
||||
|
||||
assert(ctx);
|
||||
|
||||
node = rbtree_first(&ctx->device_map);
|
||||
return node ? ratbagd_device_from_node(node) : NULL;
|
||||
}
|
||||
|
||||
struct ratbagd_device *ratbagd_device_next(struct ratbagd_device *device)
|
||||
{
|
||||
struct RBNode *node;
|
||||
|
||||
assert(device);
|
||||
|
||||
node = rbnode_next(&device->node);
|
||||
return node ? ratbagd_device_from_node(node) : NULL;
|
||||
}
|
||||
|
||||
int ratbagd_device_list(struct ratbagd *ctx, char ***paths)
|
||||
{
|
||||
struct ratbagd_device *device;
|
||||
char **devices, **pos;
|
||||
RBNode *node;
|
||||
|
||||
devices = calloc(ctx->n_devices + 1, sizeof(char *));
|
||||
if (!devices)
|
||||
@@ -359,10 +378,7 @@ int ratbagd_device_list(struct ratbagd *ctx, char ***paths)
|
||||
|
||||
pos = devices;
|
||||
|
||||
for (node = rbtree_first(&ctx->device_map);
|
||||
node;
|
||||
node = rbnode_next(node)) {
|
||||
device = ratbagd_device_from_node(node);
|
||||
RATBAGD_DEVICE_FOREACH(device, ctx) {
|
||||
*pos = strdup(device->path);
|
||||
if (!*pos)
|
||||
goto error;
|
||||
|
||||
@@ -74,8 +74,15 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(struct ratbagd_device *, ratbagd_device_free);
|
||||
|
||||
struct ratbagd_device *ratbagd_device_lookup(struct ratbagd *ctx,
|
||||
const char *name);
|
||||
struct ratbagd_device *ratbagd_device_first(struct ratbagd *ctx);
|
||||
struct ratbagd_device *ratbagd_device_next(struct ratbagd_device *device);
|
||||
int ratbagd_device_list(struct ratbagd *ctx, char ***paths);
|
||||
|
||||
#define RATBAGD_DEVICE_FOREACH(_device, _ctx) \
|
||||
for ((_device) = ratbagd_device_first(_ctx); \
|
||||
(_device); \
|
||||
(_device) = ratbagd_device_next(_device))
|
||||
|
||||
/*
|
||||
* Context
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user