summaryrefslogtreecommitdiff
path: root/src/task.c
diff options
context:
space:
mode:
authorMohamed Abbas <mohamed.abbas@intel.com>2009-12-08 11:53:08 -0800
committerMarcel Holtmann <marcel@holtmann.org>2009-12-09 00:18:35 +0100
commitb03f80e6d7a9248a80eb3ea6a555a336ae582027 (patch)
tree477b9b4dfee06bb8be53f511f79ce554ffdd12d9 /src/task.c
parent70b2b67cdbd30a63ac016e1314095342ab9f60b9 (diff)
downloadconnman-b03f80e6d7a9248a80eb3ea6a555a336ae582027.tar.gz
connman-b03f80e6d7a9248a80eb3ea6a555a336ae582027.tar.bz2
connman-b03f80e6d7a9248a80eb3ea6a555a336ae582027.zip
Add an option to allow processes spawn with pipes
Diffstat (limited to 'src/task.c')
-rw-r--r--src/task.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/task.c b/src/task.c
index f5495d70..3997307a 100644
--- a/src/task.c
+++ b/src/task.c
@@ -267,12 +267,15 @@ static void task_setup(gpointer user_data)
* @task: task structure
* @function: exit callback
* @user_data: optional exit user data
+ * @fd: optional spawn with pipe
*
* Execute program specified by #task
*/
int connman_task_run(struct connman_task *task,
- connman_task_exit_t function, void *user_data)
+ connman_task_exit_t function, void *user_data,
+ int *fd, int *standard_output, int *standard_error)
{
+ gboolean result;
GSpawnFlags flags = G_SPAWN_DO_NOT_REAP_CHILD |
G_SPAWN_STDOUT_TO_DEV_NULL;
char **argv, **envp;
@@ -282,6 +285,11 @@ int connman_task_run(struct connman_task *task,
if (task->pid > 0)
return -EALREADY;
+ if (standard_output == NULL)
+ flags |= G_SPAWN_STDOUT_TO_DEV_NULL;
+ if (standard_error == NULL)
+ flags |= G_SPAWN_STDERR_TO_DEV_NULL;
+
task->exit_func = function;
task->exit_data = user_data;
@@ -312,8 +320,12 @@ int connman_task_run(struct connman_task *task,
argv = (char **) task->argv->pdata;
envp = (char **) task->envp->pdata;
- if (g_spawn_async(NULL, argv, envp, flags,
- task_setup, task, &task->pid, NULL) == FALSE) {
+ result = g_spawn_async_with_pipes(NULL, argv, envp,
+ G_SPAWN_DO_NOT_REAP_CHILD,
+ task_setup, task, &task->pid,
+ fd, standard_output,
+ standard_output, NULL);
+ if (result == FALSE) {
connman_error("Failed to spawn %s", argv[0]);
return -EIO;
}