]> git.ozlabs.org Git - petitboot/blobdiff - discover/device-handler.c
Hook up parsers to device discovery
[petitboot] / discover / device-handler.c
index 1f8938f295b322e68b2df19fb7eeadd8146b1ca1..593b8e0a961e8f0c3463a46702988442eca06135 100644 (file)
@@ -11,6 +11,8 @@
 #include <pb-protocol/pb-protocol.h>
 
 #include "device-handler.h"
+#include "discover-server.h"
+#include "parser.h"
 #include "udev.h"
 #include "log.h"
 #include "paths.h"
@@ -28,18 +30,6 @@ struct device_handler {
        struct list contexts;
 };
 
-struct discover_context {
-       char *id;
-       char *device_path;
-       char *mount_path;
-       struct udev_event *event;
-       struct device *device;
-       char **links;
-       int n_links;
-
-       struct list_item list;
-};
-
 struct mount_map {
        char *device_path;
        char *mount_point;
@@ -335,9 +325,18 @@ static int handle_add_event(struct device_handler *handler,
        }
 
        list_add(&handler->contexts, &ctx->list);
-
        talloc_set_destructor(ctx, destroy_context);
 
+       /* set up the top-level device */
+       ctx->device = talloc_zero(ctx, struct device);
+       ctx->device->id = talloc_strdup(ctx->device, ctx->id);
+       list_init(&ctx->device->boot_options);
+
+       /* run the parsers */
+       iterate_parsers(ctx);
+
+       discover_server_notify_add(handler->server, ctx->device);
+
        return 0;
 }
 
@@ -350,6 +349,8 @@ static int handle_remove_event(struct device_handler *handler,
        if (!ctx)
                return 0;
 
+       discover_server_notify_remove(handler->server, ctx->device);
+
        talloc_free(ctx);
 
        return 0;
@@ -381,6 +382,7 @@ struct device_handler *device_handler_init(struct discover_server *server)
        handler = talloc(NULL, struct device_handler);
        handler->devices = NULL;
        handler->n_devices = 0;
+       handler->server = server;
 
        list_init(&handler->contexts);