From: Jeremy Kerr Date: Tue, 20 Aug 2013 02:14:22 +0000 (+0800) Subject: lib/process: Add dry_run argument to process_init X-Git-Tag: v1.0.0~508 X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=commitdiff_plain;h=815df381d55e09fd291145ef2b86729c12583366;hp=51c6aaf7864eb65779d548ee2549caa357f71e2c lib/process: Add dry_run argument to process_init Implement dry-run behaviour on the discover server by passing a bool to process_init. UIs don't need to support dry runs. Signed-off-by: Jeremy Kerr --- diff --git a/discover/pb-discover.c b/discover/pb-discover.c index 61da509..6d62e14 100644 --- a/discover/pb-discover.c +++ b/discover/pb-discover.c @@ -168,7 +168,7 @@ int main(int argc, char *argv[]) if (!server) return EXIT_FAILURE; - procset = process_init(server, waitset); + procset = process_init(server, waitset, opts.dry_run == opt_yes); if (!procset) return EXIT_FAILURE; diff --git a/lib/process/process.c b/lib/process/process.c index e1a158b..6fac649 100644 --- a/lib/process/process.c +++ b/lib/process/process.c @@ -29,6 +29,7 @@ struct procset { struct list async_list; int sigchld_pipe[2]; struct waiter *sigchld_waiter; + bool dry_run; }; /* Internal data type for process handling @@ -245,13 +246,14 @@ static int process_fini(void *p) return 0; } -struct procset *process_init(void *ctx, struct waitset *set) +struct procset *process_init(void *ctx, struct waitset *set, bool dry_run) { struct sigaction sa; int rc; procset = talloc(ctx, struct procset); procset->waitset = set; + procset->dry_run = dry_run; list_init(&procset->async_list); rc = pipe(procset->sigchld_pipe); @@ -330,6 +332,8 @@ static int process_run_common(struct process_info *procinfo) if (pid == 0) { process_setup_stdout_child(procinfo); + if (procset->dry_run) + exit(EXIT_SUCCESS); execvp(process->path, (char * const *)process->argv); exit(EXIT_FAILURE); } diff --git a/lib/process/process.h b/lib/process/process.h index 9e2a2d1..caeda92 100644 --- a/lib/process/process.h +++ b/lib/process/process.h @@ -47,7 +47,7 @@ struct process { * process_create. The pointer returned can be talloc_free()-ed, or can be * automatically freed through destruction of the ctx talloc tree. */ -struct procset *process_init(void *ctx, struct waitset *set); +struct procset *process_init(void *ctx, struct waitset *set, bool dry_run); struct process *process_create(void *ctx); diff --git a/ui/ncurses/nc-cui.c b/ui/ncurses/nc-cui.c index b09f030..4f7b121 100644 --- a/ui/ncurses/nc-cui.c +++ b/ui/ncurses/nc-cui.c @@ -508,7 +508,7 @@ struct cui *cui_init(void* platform_info, cui->platform_info = platform_info; cui->waitset = waitset_create(cui); - process_init(cui, cui->waitset); + process_init(cui, cui->waitset, false); setlocale(LC_ALL, ""); diff --git a/ui/ncurses/nc-cui.h b/ui/ncurses/nc-cui.h index a5ac5d5..4c13ddf 100644 --- a/ui/ncurses/nc-cui.h +++ b/ui/ncurses/nc-cui.h @@ -62,7 +62,8 @@ struct cui { }; struct cui *cui_init(void* platform_info, - int (*js_map)(const struct js_event *e), int start_deamon); + int (*js_map)(const struct js_event *e), + int start_deamon); struct nc_scr *cui_set_current(struct cui *cui, struct nc_scr *scr); int cui_run(struct cui *cui, struct pmenu *main, unsigned int default_item); int cui_boot_editor_run(struct pmenu_item *item); diff --git a/ui/twin/pbt-client.c b/ui/twin/pbt-client.c index 20ce31a..dba6110 100644 --- a/ui/twin/pbt-client.c +++ b/ui/twin/pbt-client.c @@ -270,7 +270,7 @@ struct pbt_client *pbt_client_init(enum pbt_twin_backend backend, pbt_client->waitset = waitset_create(pbt_client); - process_init(pbt_client, pbt_client->waitset); + process_init(pbt_client, pbt_client->waitset, false); pbt_client->sig = "pbt_client"; pbt_client->frame.scr = pbt_scr_init(pbt_client, pbt_client->waitset,