diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2013-08-12 16:39:36 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2013-08-19 13:27:59 +0800 |
commit | 823958fbbd17ab2c1b2a1779eb10351ca0a668c6 (patch) | |
tree | 1c881555dd8da621dcf28dd64dfe4c85b189f5e1 /lib/pb-config | |
parent | d20e98b93afaf25faca4db2a3583c191bdabe439 (diff) | |
download | talos-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 'lib/pb-config')
-rw-r--r-- | lib/pb-config/storage-powerpc-nvram.c | 72 |
1 files changed, 22 insertions, 50 deletions
diff --git a/lib/pb-config/storage-powerpc-nvram.c b/lib/pb-config/storage-powerpc-nvram.c index 3ed3c46..7c8b9e1 100644 --- a/lib/pb-config/storage-powerpc-nvram.c +++ b/lib/pb-config/storage-powerpc-nvram.c @@ -7,6 +7,7 @@ #include <talloc/talloc.h> #include <list/list.h> #include <log/log.h> +#include <process/process.h> #include "pb-config.h" #include "storage.h" @@ -117,64 +118,35 @@ static int parse_nvram_params(struct powerpc_nvram_storage *nv, static int parse_nvram(struct powerpc_nvram_storage *nv) { - int rc, len, buf_len; - int pipefds[2], status; - char *buf; - pid_t pid; - - rc = pipe(pipefds); - if (rc) { - perror("pipe"); - return -1; - } - - pid = fork(); - - if (pid < 0) { - perror("fork"); - return -1; - } - - if (pid == 0) { - close(STDIN_FILENO); - close(pipefds[0]); - dup2(pipefds[1], STDOUT_FILENO); - execlp("nvram", "nvram", "--print-config", - "--partition", partition, NULL); - exit(EXIT_FAILURE); - } - - close(pipefds[1]); - - len = 0; - buf_len = max_partition_size; - buf = talloc_array(nv, char, buf_len); + struct process *process; + const char *argv[5]; + int rc; - for (;;) { - rc = read(pipefds[0], buf + len, buf_len - len); + argv[0] = "nvram"; + argv[1] = "--print-config"; + argv[2] = "--partition"; + argv[3] = partition; + argv[4] = NULL; - if (rc < 0) { - perror("read"); - break; - } - - if (rc == 0) - break; + process = process_create(nv); + process->path = "nvram"; + process->argv = argv; + process->keep_stdout = true; - len += rc; - } + rc = process_run_sync(process); - waitpid(pid, &status, 0); - if (!WIFEXITED(status) || WEXITSTATUS(status)) { + if (rc || !WIFEXITED(process->exit_status) + || WEXITSTATUS(process->exit_status)) { fprintf(stderr, "nvram process returned " "non-zero exit status\n"); - return -1; + rc = -1; + } else { + rc = parse_nvram_params(nv, process->stdout_buf, + process->stdout_len); } - if (rc < 0) - return rc; - - return parse_nvram_params(nv, buf, len); + process_release(process); + return rc; } static const char *get_param(struct powerpc_nvram_storage *nv, |