diff mbox

[05/31] petitboot: Log child output

Message ID 20090708001135.296018802@am.sony.com
State New
Headers show

Commit Message

Geoff Levand July 8, 2009, 12:11 a.m. UTC
Redirect the output of child processes to pb_log.

Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
---
 lib/system/system.c |   16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)
diff mbox

Patch

--- a/lib/system/system.c
+++ b/lib/system/system.c
@@ -3,6 +3,7 @@ 
 #include "config.h"
 #endif
 
+#include <assert.h>
 #include <errno.h>
 #include <stdlib.h>
 #include <string.h>
@@ -104,13 +105,13 @@  int pb_rmdir_recursive(const char *base,
 
 int pb_run_cmd(const char *const *cmd_argv)
 {
-	int status;
-	pid_t pid;
 #if defined(DEBUG)
 	enum {do_debug = 1};
 #else
 	enum {do_debug = 0};
 #endif
+	int status;
+	pid_t pid;
 
 	if (do_debug) {
 		const char *const *p = cmd_argv;
@@ -125,12 +126,23 @@  int pb_run_cmd(const char *const *cmd_ar
 		pb_log("%s: %s\n", __func__, cmd_argv[0]);
 
 	pid = fork();
+
 	if (pid == -1) {
 		pb_log("%s: fork failed: %s\n", __func__, strerror(errno));
 		return -1;
 	}
 
 	if (pid == 0) {
+		int log = fileno(pb_log_get_stream());
+
+		/* Redirect child output to log. */
+
+		status = dup2(log, STDOUT_FILENO);
+		assert(status != -1);
+
+		status = dup2(log, STDERR_FILENO);
+		assert(status != -1);
+
 		execvp(cmd_argv[0], (char *const *)cmd_argv);
 		pb_log("%s: exec failed: %s\n", __func__, strerror(errno));
 		exit(EXIT_FAILURE);