add an option to allow process spawn with pipe support.
---
diff --git a/include/task.h b/include/task.h
index 76639d4..0deaa8a 100644
--- a/include/task.h
+++ b/include/task.h
@@ -56,7 +56,7 @@ int connman_task_set_notify(struct connman_task *task, const
char *member,
connman_task_notify_t function, void *user_data);
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 connman_task_stop(struct connman_task *task);
#ifdef __cplusplus
diff --git a/src/task.c b/src/task.c
index f5495d7..85e8787 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)
{
+ gboolean ret;
GSpawnFlags flags = G_SPAWN_DO_NOT_REAP_CHILD |
G_SPAWN_STDOUT_TO_DEV_NULL;
char **argv, **envp;
@@ -312,8 +315,16 @@ 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) {
+ if (fd)
+ ret = g_spawn_async_with_pipes(NULL, argv, envp,
+ G_SPAWN_DO_NOT_REAP_CHILD,
+ task_setup, task, &task->pid,
+ fd, NULL, NULL, NULL);
+ else
+ ret = g_spawn_async(NULL, argv, envp, flags,
+ task_setup, task, &task->pid, NULL);
+
+ if (ret == FALSE) {
connman_error("Failed to spawn %s", argv[0]);
return -EIO;
}
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman