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/system | |
parent | d20e98b93afaf25faca4db2a3583c191bdabe439 (diff) | |
download | petitboot-823958fbbd17ab2c1b2a1779eb10351ca0a668c6.zip petitboot-823958fbbd17ab2c1b2a1779eb10351ca0a668c6.tar.gz |
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/system')
-rw-r--r-- | lib/system/system.c | 74 | ||||
-rw-r--r-- | lib/system/system.h | 2 |
2 files changed, 2 insertions, 74 deletions
diff --git a/lib/system/system.c b/lib/system/system.c index 528e134..ff4ae99 100644 --- a/lib/system/system.c +++ b/lib/system/system.c @@ -102,67 +102,22 @@ int pb_rmdir_recursive(const char *base, const char *dir) return 0; } -static int read_pipe(void *ctx, int fd, char **bufp, int *lenp) -{ - int rc, len, alloc_len; - char *buf; - - alloc_len = 4096; - len = 0; - - buf = talloc_array(ctx, char, alloc_len); - - for (;;) { - rc = read(fd, buf, alloc_len - len - 1); - if (rc <= 0) - break; - - len += rc; - if (len == alloc_len - 1) { - alloc_len *= 2; - buf = talloc_realloc(ctx, buf, char, alloc_len); - } - } - - if (rc < 0) { - talloc_free(buf); - return rc; - } - - buf[len] = '\0'; - *bufp = buf; - *lenp = len; - - return 0; -} - /** * pb_run_cmd - Run the supplied command. * @cmd_argv: An argument list array for execv. * @wait: Wait for the child process to complete before returning. * @dry_run: Don't actually fork and exec. */ - int pb_run_cmd(const char *const *cmd_argv, int wait, int dry_run) { - return pb_run_cmd_pipe(cmd_argv, wait, dry_run, NULL, NULL, NULL); -} - -int pb_run_cmd_pipe(const char *const *cmd_argv, int wait, int dry_run, - void *ctx, char **stdout_buf, int *stdout_buf_len) -{ #if defined(DEBUG) enum {do_debug = 1}; #else enum {do_debug = 0}; #endif - int status, pipefd[2]; + int status; pid_t pid; - assert(!stdout_buf || wait); - assert(!stdout_buf || ctx); - assert(!stdout_buf || stdout_buf_len); - if (do_debug) { const char *const *p = cmd_argv; @@ -177,22 +132,9 @@ int pb_run_cmd_pipe(const char *const *cmd_argv, int wait, int dry_run, pb_log("%s: %s%s\n", __func__, (dry_run ? "(dry-run) " : ""), cmd_argv[0]); - if (stdout_buf) { - *stdout_buf = NULL; - *stdout_buf_len = 0; - } - if (dry_run) return 0; - if (stdout_buf) { - status = pipe(pipefd); - if (status) { - pb_log("pipe failed"); - return -1; - } - } - pid = fork(); if (pid == -1) { @@ -206,13 +148,8 @@ int pb_run_cmd_pipe(const char *const *cmd_argv, int wait, int dry_run, /* Redirect child output to log. */ - if (stdout_buf) { - status = dup2(pipefd[1], STDOUT_FILENO); - } else { - status = dup2(log, STDOUT_FILENO); - } + status = dup2(log, STDOUT_FILENO); assert(status != -1); - status = dup2(log, STDERR_FILENO); assert(status != -1); @@ -224,13 +161,6 @@ int pb_run_cmd_pipe(const char *const *cmd_argv, int wait, int dry_run, if (!wait && !waitpid(pid, &status, WNOHANG)) return 0; - if (stdout_buf) { - close(pipefd[1]); - status = read_pipe(ctx, pipefd[0], stdout_buf, stdout_buf_len); - if (status) - return -1; - } - if (waitpid(pid, &status, 0) == -1) { pb_log("%s: waitpid failed: %s\n", __func__, strerror(errno)); diff --git a/lib/system/system.h b/lib/system/system.h index a7a1a12..271c435 100644 --- a/lib/system/system.h +++ b/lib/system/system.h @@ -18,8 +18,6 @@ struct pb_system_apps { extern const struct pb_system_apps pb_system_apps; int pb_run_cmd(const char *const *cmd_argv, int wait, int dry_run); -int pb_run_cmd_pipe(const char *const *cmd_argv, int wait, int dry_run, - void *ctx, char **buf, int *buf_len); int pb_mkdir_recursive(const char *dir); int pb_rmdir_recursive(const char *base, const char *dir); |