summaryrefslogtreecommitdiffstats
path: root/lib/system
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/system
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/system')
-rw-r--r--lib/system/system.c74
-rw-r--r--lib/system/system.h2
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);
OpenPOWER on IntegriCloud