diff --git a/src/ratbagd-device.c b/src/ratbagd-device.c index 7feb49fe..20865c8d 100644 --- a/src/ratbagd-device.c +++ b/src/ratbagd-device.c @@ -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; diff --git a/src/ratbagd.h b/src/ratbagd.h index 4075717f..43a7ac93 100644 --- a/src/ratbagd.h +++ b/src/ratbagd.h @@ -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 */