X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=ui%2Fncurses%2Fnc-cui.c;h=7db482b0cfe040e646d9047198ddc0c3a7b8b1df;hp=aed5ff7befdcbdec665b3cfea0f344ea00321e94;hb=52b9db95764fcdee9195113d7df225634a19c9f4;hpb=d3e5eadbdcce508c48258b15664baa753ce6fc81 diff --git a/ui/ncurses/nc-cui.c b/ui/ncurses/nc-cui.c index aed5ff7..7db482b 100644 --- a/ui/ncurses/nc-cui.c +++ b/ui/ncurses/nc-cui.c @@ -111,7 +111,7 @@ int cui_run_cmd(struct pmenu_item *item) def_prog_mode(); - result = pb_run_cmd(cmd_argv); + result = pb_run_cmd(cmd_argv, 1, 0); reset_prog_mode(); redrawwin(cui->current->main_ncw); @@ -151,7 +151,7 @@ static int cui_run_kexec(struct pmenu_item *item) clear(); mvaddstr(1, 0, "system is going down now..."); refresh(); - sleep(60); + sleep(cui->dry_run ? 1 : 60); } pb_log("%s: failed: %s\n", __func__, cod->kd->image); @@ -534,7 +534,7 @@ static struct discover_client_ops cui_client_ops = { struct cui *cui_init(void* platform_info, int (*on_kexec)(struct cui *, struct cui_opt_data *), - int (*js_map)(const struct js_event *e)) + int (*js_map)(const struct js_event *e), int start_deamon, int dry_run) { struct cui *cui; struct discover_client *client; @@ -552,9 +552,11 @@ struct cui *cui_init(void* platform_info, cui->platform_info = platform_info; cui->on_kexec = on_kexec; cui->timer.handle_timeout = cui_handle_timeout; + cui->dry_run = dry_run; /* Loop here for scripts that just started the server. */ +start_deamon: for (i = 10; i; i--) { client = discover_client_init(&cui_client_ops, cui); if (client) @@ -563,6 +565,24 @@ struct cui *cui_init(void* platform_info, sleep(1); } + if (!client && start_deamon) { + int result; + + start_deamon = 0; + + result = pb_start_daemon(); + + if (!result) + goto start_deamon; + + pb_log("%s: discover_client_init failed.\n", __func__); + fprintf(stderr, "%s: error: discover_client_init failed.\n", + __func__); + fprintf(stderr, "could not start pb-discover, the petitboot " + "daemon.\n"); + goto fail_client_init; + } + if (!client) { pb_log("%s: discover_client_init failed.\n", __func__); fprintf(stderr, "%s: error: discover_client_init failed.\n",