diff options
author | Mohamed Abbas <mohamed.abbas@intel.com> | 2009-12-08 11:53:08 -0800 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-12-09 00:18:35 +0100 |
commit | b03f80e6d7a9248a80eb3ea6a555a336ae582027 (patch) | |
tree | 477b9b4dfee06bb8be53f511f79ce554ffdd12d9 /src | |
parent | 70b2b67cdbd30a63ac016e1314095342ab9f60b9 (diff) | |
download | connman-b03f80e6d7a9248a80eb3ea6a555a336ae582027.tar.gz connman-b03f80e6d7a9248a80eb3ea6a555a336ae582027.tar.bz2 connman-b03f80e6d7a9248a80eb3ea6a555a336ae582027.zip |
Add an option to allow processes spawn with pipes
Diffstat (limited to 'src')
-rw-r--r-- | src/task.c | 18 |
1 files changed, 15 insertions, 3 deletions
@@ -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; } |