X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgsubprocesslauncher.c;h=fbcbf6a45b2d9e2b784b7d1680c256175e64f653;hb=c8d10470939847069b1a346d4c44f2adde3469f6;hp=ef05023e12ffebb42dceccc4d6a7f252690d436d;hpb=542ad4db031273b2ce6416f8909fbff933113ec6;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gsubprocesslauncher.c b/gio/gsubprocesslauncher.c index ef05023..fbcbf6a 100644 --- a/gio/gsubprocesslauncher.c +++ b/gio/gsubprocesslauncher.c @@ -15,9 +15,10 @@ */ /** - * SECTION:gsubprocess + * SECTION:gsubprocesslauncher * @title: GSubprocess Launcher * @short_description: Environment options for launching a child process + * @include: gio/gio.h * * This class contains a set of options for launching child processes, * such as where its standard input and output will be directed, the @@ -130,12 +131,10 @@ static void g_subprocess_launcher_finalize (GObject *object) { GSubprocessLauncher *self = G_SUBPROCESS_LAUNCHER (object); - guint i; - - g_strfreev (self->envp); - g_free (self->cwd); #ifdef G_OS_UNIX + guint i; + g_free (self->stdin_path); g_free (self->stdout_path); g_free (self->stderr_path); @@ -161,10 +160,13 @@ g_subprocess_launcher_finalize (GObject *object) (void) close (g_array_index (self->needdup_fd_assignments, int, i)); g_array_unref (self->needdup_fd_assignments); } -#endif if (self->child_setup_destroy_notify) (* self->child_setup_destroy_notify) (self->child_setup_user_data); +#endif + + g_strfreev (self->envp); + g_free (self->cwd); G_OBJECT_CLASS (g_subprocess_launcher_parent_class)->finalize (object); } @@ -172,12 +174,12 @@ g_subprocess_launcher_finalize (GObject *object) static void g_subprocess_launcher_init (GSubprocessLauncher *self) { - self->envp = g_listenv (); + self->envp = g_get_environ (); +#ifdef G_OS_UNIX self->stdin_fd = -1; self->stdout_fd = -1; self->stderr_fd = -1; -#ifdef G_OS_UNIX self->basic_fd_assignments = g_array_new (FALSE, 0, sizeof (int)); self->needdup_fd_assignments = g_array_new (FALSE, 0, sizeof (int)); #endif @@ -223,7 +225,7 @@ g_subprocess_launcher_new (GSubprocessFlags flags) /** * g_subprocess_launcher_set_environ: * @self: a #GSubprocess - * @environ: the replacement environment + * @env: the replacement environment * * Replace the entire environment of processes launched from this * launcher with the given 'environ' variable. @@ -243,10 +245,10 @@ g_subprocess_launcher_new (GSubprocessFlags flags) **/ void g_subprocess_launcher_set_environ (GSubprocessLauncher *self, - gchar **environ) + gchar **env) { g_strfreev (self->envp); - self->envp = g_strdupv (environ); + self->envp = g_strdupv (env); } /** @@ -364,9 +366,21 @@ void g_subprocess_launcher_set_flags (GSubprocessLauncher *self, GSubprocessFlags flags) { - if (verify_disposition ("stdin", flags & ALL_STDIN_FLAGS, self->stdin_fd, self->stdin_path) && - verify_disposition ("stdout", flags & ALL_STDOUT_FLAGS, self->stdout_fd, self->stdout_path) && - verify_disposition ("stderr", flags & ALL_STDERR_FLAGS, self->stderr_fd, self->stderr_path)) + const gchar *stdin_path = NULL, *stdout_path = NULL, *stderr_path = NULL; + gint stdin_fd = -1, stdout_fd = -1, stderr_fd = -1; + +#ifdef G_OS_UNIX + stdin_fd = self->stdin_fd; + stdout_fd = self->stdout_fd; + stderr_fd = self->stderr_fd; + stdin_path = self->stdin_path; + stdout_path = self->stdout_path; + stderr_path = self->stderr_path; +#endif + + if (verify_disposition ("stdin", flags & ALL_STDIN_FLAGS, stdin_fd, stdin_path) && + verify_disposition ("stdout", flags & ALL_STDOUT_FLAGS, stdout_fd, stdout_path) && + verify_disposition ("stderr", flags & ALL_STDERR_FLAGS, stderr_fd, stderr_path)) self->flags = flags; } @@ -661,8 +675,7 @@ g_subprocess_launcher_set_child_setup (GSubprocessLauncher *self, * @argv0: Command line arguments * @...: Continued arguments, %NULL terminated * - * A convenience helper for creating a #GSubprocess given a provided - * varargs list of arguments. + * Creates a #GSubprocess given a provided varargs list of arguments. * * Since: 2.40 * Returns: (transfer full): A new #GSubprocess, or %NULL on error (and @error will be set) @@ -688,6 +701,9 @@ g_subprocess_launcher_spawn (GSubprocessLauncher *launcher, while ((arg = va_arg (ap, const gchar *))) g_ptr_array_add (args, (gchar *) arg); + g_ptr_array_add (args, NULL); + va_end (ap); + result = g_subprocess_launcher_spawnv (launcher, (const gchar * const *) args->pdata, error); g_ptr_array_free (args, TRUE); @@ -699,11 +715,10 @@ g_subprocess_launcher_spawn (GSubprocessLauncher *launcher, /** * g_subprocess_launcher_spawnv: * @self: a #GSubprocessLauncher - * @argv: Command line arguments + * @argv: (array zero-terminated=1) (element-type utf8): Command line arguments * @error: Error * - * A convenience helper for creating a #GSubprocess given a provided - * array of arguments. + * Creates a #GSubprocess given a provided array of arguments. * * Since: 2.40 * Returns: (transfer full): A new #GSubprocess, or %NULL on error (and @error will be set)