summaryrefslogtreecommitdiffstats
path: root/discover/boot.c
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-08-12 16:39:36 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-08-19 13:27:59 +0800
commit823958fbbd17ab2c1b2a1779eb10351ca0a668c6 (patch)
tree1c881555dd8da621dcf28dd64dfe4c85b189f5e1 /discover/boot.c
parentd20e98b93afaf25faca4db2a3583c191bdabe439 (diff)
downloadtalos-petitboot-823958fbbd17ab2c1b2a1779eb10351ca0a668c6.tar.gz
talos-petitboot-823958fbbd17ab2c1b2a1779eb10351ca0a668c6.zip
lib/process: replace pb_run_cmd_pipe
Replace pb_run_cmd_pipe with process_create / process_run_sync. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover/boot.c')
-rw-r--r--discover/boot.c44
1 files changed, 30 insertions, 14 deletions
diff --git a/discover/boot.c b/discover/boot.c
index f9b0223..d9c606f 100644
--- a/discover/boot.c
+++ b/discover/boot.c
@@ -11,6 +11,7 @@
#include <log/log.h>
#include <pb-protocol/pb-protocol.h>
+#include <process/process.h>
#include <system/system.h>
#include <talloc/talloc.h>
#include <url/url.h>
@@ -244,29 +245,44 @@ static void run_boot_hooks(struct boot_task *task, boot_status_fn status_fn,
for (i = 0; i < n; i++) {
const char *argv[2] = { NULL, NULL };
- char *path, *buf;
- int buf_len, rc;
+ struct process *process;
+ char *path;
+ int rc;
path = join_paths(task, boot_hook_dir, hooks[i]->d_name);
- if (access(path, X_OK))
+ if (access(path, X_OK)) {
+ talloc_free(path);
continue;
+ }
- pb_log("running boot hook %s\n", hooks[i]->d_name);
+ process = process_create(task);
argv[0] = path;
- rc = pb_run_cmd_pipe(argv, 1, task->dry_run, task,
- &buf, &buf_len);
-
- /* if the hook returned with BOOT_HOOK_EXIT_UPDATE,
- * then we process stdout to look for updated params
- */
- if (rc == BOOT_HOOK_EXIT_UPDATE) {
- boot_hook_update(task, hooks[i]->d_name, buf);
- boot_hook_setenv(task);
+ process->path = path;
+ process->argv = argv;
+ process->keep_stdout = true;
+
+ pb_log("running boot hook %s\n", hooks[i]->d_name);
+
+ rc = process_run_sync(process);
+ if (rc) {
+ pb_log("boot hook exec failed!\n");
+
+ } else if (WIFEXITED(process->exit_status) &&
+ WEXITSTATUS(process->exit_status)
+ == BOOT_HOOK_EXIT_UPDATE) {
+ /* if the hook returned with BOOT_HOOK_EXIT_UPDATE,
+ * then we process stdout to look for updated params
+ */
+ if (rc == BOOT_HOOK_EXIT_UPDATE) {
+ boot_hook_update(task, hooks[i]->d_name,
+ process->stdout_buf);
+ boot_hook_setenv(task);
+ }
}
- talloc_free(buf);
+ process_release(process);
talloc_free(path);
}
OpenPOWER on IntegriCloud