#include <getopt.h>
#include <stdlib.h>
#include <signal.h>
+#include <string.h>
#include <waiter/waiter.h>
#include <log/log.h>
enum opt_value show_help;
const char *log_file;
enum opt_value show_version;
+ enum opt_value dry_run;
};
/**
static const struct option long_options[] = {
{"help", no_argument, NULL, 'h'},
{"log", required_argument, NULL, 'l'},
+ {"dry-run", no_argument, NULL, 'n'},
{"version", no_argument, NULL, 'V'},
{ NULL, 0, NULL, 0},
};
- static const char short_options[] = "hl:V";
+ static const char short_options[] = "hl:nV";
static const struct opts default_values = {
.log_file = "/var/log/petitboot/pb-discover.log",
+ .dry_run = opt_no,
};
*opts = default_values;
case 'l':
opts->log_file = optarg;
break;
+ case 'n':
+ opts->dry_run = opt_yes;
+ break;
case 'V':
opts->show_version = opt_yes;
break;
{
struct device_handler *handler;
struct discover_server *server;
+ struct waitset *waitset;
struct opts opts;
- struct udev *udev;
+ struct pb_udev *udev;
struct user_event *uev;
- FILE *log;
if (opts_parse(&opts, argc, argv)) {
print_usage();
return EXIT_SUCCESS;
}
- log = fopen(opts.log_file, "a");
- assert(log);
- pb_log_set_stream(log);
+ if (strcmp(opts.log_file, "-")) {
+ FILE *log = fopen(opts.log_file, "a");
+
+ assert(log);
+ pb_log_set_stream(log);
+ } else
+ pb_log_set_stream(stderr);
#if defined(DEBUG)
pb_log_always_flush(1);
signal(SIGINT, sigint_handler);
- server = discover_server_init();
+ waitset = waitset_create(NULL);
+
+ server = discover_server_init(waitset);
if (!server)
return EXIT_FAILURE;
- handler = device_handler_init(server);
+ handler = device_handler_init(server, opts.dry_run == opt_yes);
if (!handler)
return EXIT_FAILURE;
discover_server_set_device_source(server, handler);
- udev = udev_init(handler);
+ udev = udev_init(waitset, handler);
if (!udev)
return EXIT_FAILURE;
- uev = user_event_init(handler);
+ uev = user_event_init(waitset, handler);
if (!uev)
return EXIT_FAILURE;
- udev_trigger(udev);
user_event_trigger(uev);
for (running = 1; running;) {
- if (waiter_poll())
+ if (waiter_poll(waitset))
break;
}
device_handler_destroy(handler);
+ waitset_destroy(waitset);
+ udev_destroy(udev);
pb_log("--- end ---\n");