+/**
+ * device_handler_add - Add a device to the handler device array.
+ */
+
+static void device_handler_add(struct device_handler *handler,
+ struct device *device)
+{
+ handler->n_devices++;
+ handler->devices = talloc_realloc(handler, handler->devices,
+ struct device *, handler->n_devices);
+ handler->devices[handler->n_devices - 1] = device;
+}
+
+/**
+ * device_handler_remove - Remove a device from the handler device array.
+ */
+
+static void device_handler_remove(struct device_handler *handler,
+ struct device *device)
+{
+ unsigned int i;
+
+ for (i = 0; i < handler->n_devices; i++)
+ if (handler->devices[i] == device)
+ break;
+
+ if (i < handler->n_devices) {
+ assert(0 && "unknown device");
+ return;
+ }
+
+ handler->n_devices--;
+ memmove(&handler->devices[i], &handler->devices[i + 1],
+ (handler->n_devices - i) * sizeof(handler->devices[0]));
+ handler->devices = talloc_realloc(handler, handler->devices,
+ struct device *, handler->n_devices);
+}
+
+/**
+ * device_handler_find - Find a handler device by id.
+ */
+
+static struct device *device_handler_find(struct device_handler *handler,
+ const char *id)
+{
+ unsigned int i;
+
+ assert(id);
+
+ for (i = 0; i < handler->n_devices; i++)
+ if (handler->devices[i]->id
+ && streq(handler->devices[i]->id, id))
+ return handler->devices[i];
+
+ assert(0 && "unknown device");
+ return NULL;
+}
+
+/**
+ * device_handler_get_device_count - Get the count of current handler devices.
+ */
+
+int device_handler_get_device_count(const struct device_handler *handler)