summaryrefslogtreecommitdiffstats
path: root/lib/pb-config
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 /lib/pb-config
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 'lib/pb-config')
-rw-r--r--lib/pb-config/storage-powerpc-nvram.c72
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,
OpenPOWER on IntegriCloud