From dba5fa616ec34a6d298f00d91ff6be97740ffdcb Mon Sep 17 00:00:00 2001 From: Stefan Berger Date: Sun, 22 Sep 2024 16:23:58 -0400 Subject: [PATCH] utils: Implement wrappers for g_spawn_sync and g_spawn_async Implement warpper for g_spawn_sync and g_spawn_async that that take argv and envp arguments as 'const gchar **' since they will be called like this from swtpm_localca and swtpm_setup. Internally glib also uses the parameters like this when calling fork_exec() for example. Signed-off-by: Stefan Berger --- src/utils/swtpm_utils.h | 42 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/utils/swtpm_utils.h b/src/utils/swtpm_utils.h index 6202f658..38086471 100644 --- a/src/utils/swtpm_utils.h +++ b/src/utils/swtpm_utils.h @@ -60,4 +60,46 @@ int json_get_map_value(const char *json_input, const char *field_name, int strv_strcmp(gchar *const*str_array, const gchar *s); +/* + * Wrapper for g_spawn_sync taking const gchar ** argv / envp that + * internal glib function g_spawn_sync_impl & fork_exec will also use like + * this on posix. + */ +static inline gboolean spawn_sync(const gchar *working_directory, + const gchar **argv, + const gchar **envp, + GSpawnFlags flags, + GSpawnChildSetupFunc child_setup, + gpointer user_data, + gchar **standard_output, + gchar **standard_error, + gint *wait_status, + GError **error) +{ + g_auto(GStrv) _argv = g_strdupv((gchar **)argv); + g_auto(GStrv) _envp = g_strdupv((gchar **)envp); + + return g_spawn_sync(working_directory, _argv, _envp, flags, child_setup, + user_data, standard_output, standard_error, wait_status, + error); +} + +/* Wrapper g_spawn_async that take const gchar ** for argv and envp. */ +static inline gboolean spawn_async(const gchar *working_directory, + const gchar **argv, + const gchar **envp, + GSpawnFlags flags, + GSpawnChildSetupFunc child_setup, + gpointer user_data, + GPid *child_pid, + GError **error) +{ + g_auto(GStrv) _argv = g_strdupv((gchar **)argv); + g_auto(GStrv) _envp = g_strdupv((gchar **)envp); + + return g_spawn_async_with_pipes( + working_directory, _argv, _envp, flags, child_setup, user_data, + child_pid, NULL, NULL, NULL, error); +} + #endif /* SWTPM_UTILS_H */