[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH for-3.2 02/41] glib-compat: add g_spawn_async_wi
From: |
Samuel Thibault |
Subject: |
Re: [Qemu-devel] [PATCH for-3.2 02/41] glib-compat: add g_spawn_async_with_fds() fallback |
Date: |
Mon, 19 Nov 2018 23:50:07 +0100 |
User-agent: |
NeoMutt/20170113 (1.7.2) |
Marc-André Lureau, le mer. 14 nov. 2018 16:36:04 +0400, a ecrit:
> Signed-off-by: Marc-André Lureau <address@hidden>
Reviewed-by: Samuel Thibault <address@hidden>
include/glib-compat.h maintainers, may I keep this in my slirp tree, to
be pushed to master when appropriate?
Samuel
> ---
> include/glib-compat.h | 56 +++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 56 insertions(+)
>
> diff --git a/include/glib-compat.h b/include/glib-compat.h
> index fdf95a255d..8a078c5288 100644
> --- a/include/glib-compat.h
> +++ b/include/glib-compat.h
> @@ -83,6 +83,62 @@ static inline gboolean g_strv_contains_qemu(const gchar
> *const *strv,
> }
> #define g_strv_contains(a, b) g_strv_contains_qemu(a, b)
>
> +#if !GLIB_CHECK_VERSION(2, 58, 0)
> +typedef struct QemuGSpawnFds {
> + GSpawnChildSetupFunc child_setup;
> + gpointer user_data;
> + gint stdin_fd;
> + gint stdout_fd;
> + gint stderr_fd;
> +} QemuGSpawnFds;
> +
> +static inline void
> +qemu_gspawn_fds_setup(gpointer user_data)
> +{
> + QemuGSpawnFds *q = (QemuGSpawnFds *)user_data;
> +
> + dup2(q->stdin_fd, 0);
> + dup2(q->stdout_fd, 1);
> + dup2(q->stderr_fd, 2);
> + q->child_setup(q->user_data);
> +}
> +#endif
> +
> +static inline gboolean
> +g_spawn_async_with_fds_qemu(const gchar *working_directory,
> + gchar **argv,
> + gchar **envp,
> + GSpawnFlags flags,
> + GSpawnChildSetupFunc child_setup,
> + gpointer user_data,
> + GPid *child_pid,
> + gint stdin_fd,
> + gint stdout_fd,
> + gint stderr_fd,
> + GError **error)
> +{
> +#if GLIB_CHECK_VERSION(2, 58, 0)
> + return g_spawn_async_with_fds(working_directory, argv, envp, flags,
> + child_setup, user_data,
> + child_pid, stdin_fd, stdout_fd, stderr_fd,
> + error);
> +#else
> + QemuGSpawnFds setup = {
> + .child_setup = child_setup,
> + .user_data = user_data,
> + .stdin_fd = stdin_fd,
> + .stdout_fd = stdout_fd,
> + .stderr_fd = stderr_fd,
> + };
> +
> + return g_spawn_async(working_directory, argv, envp, flags,
> + qemu_gspawn_fds_setup, &setup,
> + child_pid, error);
> +#endif
> +}
> +
> +#define g_spawn_async_with_fds(wd, argv, env, f, c, d, p, ifd, ofd, efd,
> err) \
> + g_spawn_async_with_fds_qemu(wd, argv, env, f, c, d, p, ifd, ofd, efd,
> err)
>
> #if defined(_WIN32) && !GLIB_CHECK_VERSION(2, 50, 0)
> /*
> --
> 2.19.1.708.g4ede3d42df
>
--
Samuel
bien sûr que ça convient mieux à tout le monde
enfin, dans la mesure où tout le monde c'est comme moi
-+- le consensus, c'est facile -+-