[gnome-builder] threading: add helper to join argv



commit a9fe7158be934fe36baf7d70ac6921eaf4bf9a80
Author: Christian Hergert <chergert redhat com>
Date:   Thu May 2 20:54:44 2019 -0700

    threading: add helper to join argv
    
    This is useful when changing things to be sh -c opts style of
    execution.

 src/libide/threading/ide-subprocess-launcher.c | 28 ++++++++++++++++++++++++++
 src/libide/threading/ide-subprocess-launcher.h |  3 +++
 2 files changed, 31 insertions(+)
---
diff --git a/src/libide/threading/ide-subprocess-launcher.c b/src/libide/threading/ide-subprocess-launcher.c
index 4a06dddd3..b692e16fc 100644
--- a/src/libide/threading/ide-subprocess-launcher.c
+++ b/src/libide/threading/ide-subprocess-launcher.c
@@ -1173,3 +1173,31 @@ ide_subprocess_launcher_get_arg (IdeSubprocessLauncher *self,
 
   return NULL;
 }
+
+void
+ide_subprocess_launcher_join_args_for_sh_c (IdeSubprocessLauncher *self,
+                                            guint                  start_pos)
+{
+  IdeSubprocessLauncherPrivate *priv = ide_subprocess_launcher_get_instance_private (self);
+  const gchar * const *argv;
+  GString *str;
+
+  g_return_if_fail (IDE_IS_SUBPROCESS_LAUNCHER (self));
+  g_return_if_fail (start_pos < priv->argv->len - 1);
+
+  str = g_string_new (NULL);
+  argv = ide_subprocess_launcher_get_argv (self);
+
+  for (guint i = start_pos; argv[i] != NULL; i++)
+    {
+      g_autofree gchar *quoted_string = g_shell_quote (argv[i]);
+
+      if (i > 0)
+        g_string_append_c (str, ' ');
+      g_string_append (str, quoted_string);
+    }
+
+  g_ptr_array_remove_range (priv->argv, start_pos, priv->argv->len - start_pos);
+  g_ptr_array_add (priv->argv, g_string_free (g_steal_pointer (&str), FALSE));
+  g_ptr_array_add (priv->argv, NULL);
+}
diff --git a/src/libide/threading/ide-subprocess-launcher.h b/src/libide/threading/ide-subprocess-launcher.h
index 2daa565fc..1567ff271 100644
--- a/src/libide/threading/ide-subprocess-launcher.h
+++ b/src/libide/threading/ide-subprocess-launcher.h
@@ -138,5 +138,8 @@ IDE_AVAILABLE_IN_3_32
 gboolean               ide_subprocess_launcher_get_needs_tty        (IdeSubprocessLauncher  *self);
 IDE_AVAILABLE_IN_3_34
 gint                   ide_subprocess_launcher_get_max_fd           (IdeSubprocessLauncher  *self);
+IDE_AVAILABLE_IN_3_34
+void                   ide_subprocess_launcher_join_args_for_sh_c   (IdeSubprocessLauncher  *self,
+                                                                     guint                   start_pos);
 
 G_END_DECLS


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]