qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] slirp: Move g_spawn_async_with_fds_qemu compati


From: Marc-André Lureau
Subject: Re: [Qemu-devel] [PATCH] slirp: Move g_spawn_async_with_fds_qemu compatibility to slirp/
Date: Mon, 4 Feb 2019 09:56:26 +0100

Hi

On Sun, Feb 3, 2019 at 3:34 PM Samuel Thibault
<address@hidden> wrote:
>
> Only slirp actually needs it, and will need it along in libslirp.
>
> Signed-off-by: Samuel Thibault <address@hidden>

Reviewed-by: Marc-André Lureau <address@hidden>

> ---
>  include/glib-compat.h | 57 -------------------------------------------
>  slirp/misc.c          | 57 +++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 57 insertions(+), 57 deletions(-)
>
> diff --git a/include/glib-compat.h b/include/glib-compat.h
> index 8a078c5288..1291628e09 100644
> --- a/include/glib-compat.h
> +++ b/include/glib-compat.h
> @@ -83,63 +83,6 @@ 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)
>  /*
>   * g_poll has a problem on Windows when using
> diff --git a/slirp/misc.c b/slirp/misc.c
> index edb0d187d7..18b25f93ac 100644
> --- a/slirp/misc.c
> +++ b/slirp/misc.c
> @@ -120,6 +120,63 @@ fork_exec_child_setup(gpointer data)
>  #endif
>  }
>
> +#if !GLIB_CHECK_VERSION(2, 58, 0)
> +typedef struct SlirpGSpawnFds {
> +    GSpawnChildSetupFunc child_setup;
> +    gpointer user_data;
> +    gint stdin_fd;
> +    gint stdout_fd;
> +    gint stderr_fd;
> +} SlirpGSpawnFds;
> +
> +static inline void
> +slirp_gspawn_fds_setup(gpointer user_data)
> +{
> +    SlirpGSpawnFds *q = (SlirpGSpawnFds *)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_slirp(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,
> +                         slirp_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_slirp(wd, argv, env, f, c, d, p, ifd, ofd, efd, 
> err)
> +
>  int
>  fork_exec(struct socket *so, const char *ex)
>  {
> --
> 2.20.1
>
>


-- 
Marc-André Lureau



reply via email to

[Prev in Thread] Current Thread [Next in Thread]