summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-08-20 10:14:22 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-08-20 10:14:44 +0800
commit815df381d55e09fd291145ef2b86729c12583366 (patch)
tree9c76855645e36b35168b98a479583d8c7370c387
parent51c6aaf7864eb65779d548ee2549caa357f71e2c (diff)
downloadtalos-petitboot-815df381d55e09fd291145ef2b86729c12583366.tar.gz
talos-petitboot-815df381d55e09fd291145ef2b86729c12583366.zip
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 <jk@ozlabs.org>
-rw-r--r--discover/pb-discover.c2
-rw-r--r--lib/process/process.c6
-rw-r--r--lib/process/process.h2
-rw-r--r--ui/ncurses/nc-cui.c2
-rw-r--r--ui/ncurses/nc-cui.h3
-rw-r--r--ui/twin/pbt-client.c2
6 files changed, 11 insertions, 6 deletions
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,
OpenPOWER on IntegriCloud