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

Reply via email to