#include <getopt.h>
#include <stdlib.h>
#include <signal.h>
+#include <locale.h>
#include <string.h>
#include <waiter/waiter.h>
#include <log/log.h>
+#include <process/process.h>
+#include <talloc/talloc.h>
+#include <i18n/i18n.h>
-#include "udev.h"
-#include "user-event.h"
#include "discover-server.h"
#include "device-handler.h"
+#include "sysinfo.h"
+#include "platform.h"
static void print_version(void)
{
{
print_version();
printf(
-"Usage: pb-discover [-h, --help] [-l, --log log-file] [-V, --version]\n");
+"Usage: pb-discover [-a, --no-autoboot] [-h, --help] [-l, --log log-file]\n"
+" [-n, --dry-run] [-v, --verbose] [-V, --version]\n");
}
/**
*/
struct opts {
+ enum opt_value no_autoboot;
enum opt_value show_help;
const char *log_file;
- enum opt_value show_version;
enum opt_value dry_run;
+ enum opt_value show_version;
+ enum opt_value verbose;
};
/**
static int opts_parse(struct opts *opts, int argc, char *argv[])
{
static const struct option long_options[] = {
+ {"no-autoboot", no_argument, NULL, 'a'},
{"help", no_argument, NULL, 'h'},
{"log", required_argument, NULL, 'l'},
{"dry-run", no_argument, NULL, 'n'},
+ {"verbose", no_argument, NULL, 'v'},
{"version", no_argument, NULL, 'V'},
{ NULL, 0, NULL, 0},
};
- static const char short_options[] = "hl:nV";
+ static const char short_options[] = "ahl:nvV";
static const struct opts default_values = {
+ .no_autoboot = opt_no,
.log_file = "/var/log/petitboot/pb-discover.log",
.dry_run = opt_no,
+ .verbose = opt_no,
};
*opts = default_values;
break;
switch (c) {
+ case 'a':
+ opts->no_autoboot = opt_yes;
+ break;
case 'h':
opts->show_help = opt_yes;
break;
case 'n':
opts->dry_run = opt_yes;
break;
+ case 'v':
+ opts->verbose = opt_yes;
+ break;
case 'V':
opts->show_version = opt_yes;
break;
struct device_handler *handler;
struct discover_server *server;
struct waitset *waitset;
+ struct procset *procset;
struct opts opts;
- struct pb_udev *udev;
- struct user_event *uev;
+ FILE *log;
+
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
if (opts_parse(&opts, argc, argv)) {
print_usage();
return EXIT_SUCCESS;
}
+ log = stderr;
if (strcmp(opts.log_file, "-")) {
- FILE *log = fopen(opts.log_file, "a");
+ log = fopen(opts.log_file, "a");
+ if (!log) {
+ fprintf(stderr, "can't open log file %s, logging to "
+ "stderr\n", opts.log_file);
+ log = stderr;
+ }
+ }
+ pb_log_init(log);
- assert(log);
- pb_log_set_stream(log);
- } else
- pb_log_set_stream(stderr);
+ if (opts.verbose == opt_yes)
+ pb_log_set_debug(true);
-#if defined(DEBUG)
- pb_log_always_flush(1);
-#endif
pb_log("--- pb-discover ---\n");
/* we look for closed sockets when we write, so ignore SIGPIPE */
if (!server)
return EXIT_FAILURE;
- handler = device_handler_init(server, opts.dry_run == opt_yes);
- if (!handler)
+ procset = process_init(server, waitset, opts.dry_run == opt_yes);
+ if (!procset)
return EXIT_FAILURE;
- discover_server_set_device_source(server, handler);
+ platform_init(NULL);
+ if (opts.no_autoboot == opt_yes)
+ config_set_autoboot(false);
- udev = udev_init(waitset, handler);
- if (!udev)
- return EXIT_FAILURE;
+ if (config_get()->lang)
+ setlocale(LC_ALL, config_get()->lang);
+
+ if (config_get()->debug)
+ pb_log_set_debug(true);
- uev = user_event_init(waitset, handler);
- if (!uev)
+ system_info_init(server);
+
+ handler = device_handler_init(server, waitset, opts.dry_run == opt_yes);
+ if (!handler)
return EXIT_FAILURE;
- user_event_trigger(uev);
+ discover_server_set_device_source(server, handler);
for (running = 1; running;) {
if (waiter_poll(waitset))
}
device_handler_destroy(handler);
- waitset_destroy(waitset);
- udev_destroy(udev);
+ discover_server_destroy(server);
+ platform_fini();
+ talloc_free(waitset);
pb_log("--- end ---\n");
+ if (log != stderr)
+ fclose(log);
+
return EXIT_SUCCESS;
}