hook gvariant vectors up to kdbus
[platform/upstream/glib.git] / gio / gsubprocesslauncher.c
index ef05023..fbcbf6a 100644 (file)
  */
 
 /**
- * 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)