diff options
-rw-r--r-- | discover/device-handler.c | 42 | ||||
-rw-r--r-- | discover/pb-discover.c | 22 | ||||
-rw-r--r-- | discover/udev.c | 12 | ||||
-rw-r--r-- | discover/udev.h | 5 | ||||
-rw-r--r-- | discover/user-event.c | 11 | ||||
-rw-r--r-- | discover/user-event.h | 5 |
6 files changed, 53 insertions, 44 deletions
diff --git a/discover/device-handler.c b/discover/device-handler.c index 8bac866..352a477 100644 --- a/discover/device-handler.c +++ b/discover/device-handler.c @@ -19,6 +19,7 @@ #include "device-handler.h" #include "discover-server.h" +#include "user-event.h" #include "platform.h" #include "event.h" #include "parser.h" @@ -26,11 +27,17 @@ #include "paths.h" #include "sysinfo.h" #include "boot.h" +#include "udev.h" +#include "network.h" struct device_handler { struct discover_server *server; int dry_run; + struct pb_udev *udev; + struct network *network; + struct user_event *user_event; + struct discover_device **devices; unsigned int n_devices; @@ -49,6 +56,8 @@ struct device_handler { static int mount_device(struct discover_device *dev); static int umount_device(struct discover_device *dev); +static int device_handler_init_sources(struct device_handler *handler); + void discover_context_add_boot_option(struct discover_context *ctx, struct discover_boot_option *boot_option) { @@ -260,6 +269,7 @@ struct device_handler *device_handler_init(struct discover_server *server, struct waitset *waitset, int dry_run) { struct device_handler *handler; + int rc; handler = talloc_zero(NULL, struct device_handler); handler->server = server; @@ -274,6 +284,12 @@ struct device_handler *device_handler_init(struct discover_server *server, parser_init(); + rc = device_handler_init_sources(handler); + if (rc) { + talloc_free(handler); + return NULL; + } + return handler; } @@ -750,6 +766,26 @@ void device_handler_update_config(struct device_handler *handler, } #ifndef PETITBOOT_TEST + +static int device_handler_init_sources(struct device_handler *handler) +{ + /* init our device sources: udev, network and user events */ + handler->udev = udev_init(handler, handler->waitset); + if (!handler->udev) + return -1; + + handler->network = network_init(handler, handler->waitset, + handler->dry_run); + if (!handler->network) + return -1; + + handler->user_event = user_event_init(handler, handler->waitset); + if (!handler->user_event) + return -1; + + return 0; +} + static bool check_existing_mount(struct discover_device *dev) { struct stat devstat, mntstat; @@ -911,6 +947,12 @@ void device_release_write(struct discover_device *dev, bool release) #else +static int device_handler_init_sources( + struct device_handler *handler __attribute__((unused))) +{ + return 0; +} + static int umount_device(struct discover_device *dev __attribute__((unused))) { return 0; diff --git a/discover/pb-discover.c b/discover/pb-discover.c index bb590a9..713d99d 100644 --- a/discover/pb-discover.c +++ b/discover/pb-discover.c @@ -14,11 +14,8 @@ #include <process/process.h> #include <talloc/talloc.h> -#include "udev.h" -#include "user-event.h" #include "discover-server.h" #include "device-handler.h" -#include "network.h" #include "sysinfo.h" #include "platform.h" @@ -119,12 +116,9 @@ int main(int argc, char *argv[]) { struct device_handler *handler; struct discover_server *server; - struct network *network; struct waitset *waitset; struct procset *procset; struct opts opts; - struct pb_udev *udev; - struct user_event *uev; FILE *log; if (opts_parse(&opts, argc, argv)) { @@ -182,28 +176,12 @@ int main(int argc, char *argv[]) discover_server_set_device_source(server, handler); - /* init our device sources: udev, network and user events */ - udev = udev_init(waitset, handler); - if (!udev) - return EXIT_FAILURE; - - network = network_init(handler, waitset, opts.dry_run == opt_yes); - if (!network) - return EXIT_FAILURE; - - uev = user_event_init(waitset, handler); - if (!uev) - return EXIT_FAILURE; - for (running = 1; running;) { if (waiter_poll(waitset)) break; } - network_shutdown(network); device_handler_destroy(handler); - user_event_destroy(uev); - udev_destroy(udev); discover_server_destroy(server); platform_fini(); talloc_free(waitset); diff --git a/discover/udev.c b/discover/udev.c index 16e83d5..320dffd 100644 --- a/discover/udev.c +++ b/discover/udev.c @@ -425,12 +425,13 @@ static void udev_log_fn(struct udev __attribute__((unused)) *udev, vfprintf(pb_log_get_stream(), format, args); } -struct pb_udev *udev_init(struct waitset *waitset, - struct device_handler *handler) +struct pb_udev *udev_init(struct device_handler *handler, + struct waitset *waitset) { + struct pb_udev *udev; int result; - struct pb_udev *udev = talloc(NULL, struct pb_udev); + udev = talloc(handler, struct pb_udev); talloc_set_destructor(udev, udev_destructor); udev->handler = handler; @@ -468,8 +469,3 @@ fail_new: talloc_free(udev); return NULL; } - -void udev_destroy(struct pb_udev *udev) -{ - talloc_free(udev); -} diff --git a/discover/udev.h b/discover/udev.h index ea6f30d..edd18fa 100644 --- a/discover/udev.h +++ b/discover/udev.h @@ -5,8 +5,7 @@ struct pb_udev; struct device_handler; struct waitset; -struct pb_udev *udev_init(struct waitset *waitset, - struct device_handler *handler); -void udev_destroy(struct pb_udev *udev); +struct pb_udev *udev_init(struct device_handler *handler, + struct waitset *waitset); #endif /* _UDEV_H */ diff --git a/discover/user-event.c b/discover/user-event.c index cf7f20c..1f70045 100644 --- a/discover/user-event.c +++ b/discover/user-event.c @@ -505,15 +505,15 @@ static int user_event_destructor(void *arg) return 0; } -struct user_event *user_event_init(struct waitset *waitset, - struct device_handler *handler) +struct user_event *user_event_init(struct device_handler *handler, + struct waitset *waitset) { struct sockaddr_un addr; struct user_event *uev; unlink(PBOOT_USER_EVENT_SOCKET); - uev = talloc(NULL, struct user_event); + uev = talloc(handler, struct user_event); uev->handler = handler; @@ -546,8 +546,3 @@ out_err: talloc_free(uev); return NULL; } - -void user_event_destroy(struct user_event *uev) -{ - talloc_free(uev); -} diff --git a/discover/user-event.h b/discover/user-event.h index b892c9a..50eb947 100644 --- a/discover/user-event.h +++ b/discover/user-event.h @@ -33,8 +33,7 @@ struct pb_url *user_event_parse_conf_url(struct discover_context *ctx, struct event *event, bool *complete_url); char **user_event_parse_conf_filenames( struct discover_context *ctx, struct event *event); -struct user_event *user_event_init(struct waitset *waitset, - struct device_handler *handler); -void user_event_destroy(struct user_event *uev); +struct user_event *user_event_init(struct device_handler *handler, + struct waitset *waitset); #endif |