On 2018-11-19 23:50, Samuel Thibault wrote: > Marc-André Lureau, le mer. 14 nov. 2018 16:36:04 +0400, a ecrit: >> Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> > > Reviewed-by: Samuel Thibault <samuel.thiba...@ens-lyon.org> > > include/glib-compat.h maintainers, may I keep this in my slirp tree, to > be pushed to master when appropriate?
$ scripts/get_maintainer.pl -f include/glib-compat.h get_maintainer.pl: No maintainers found [...] ... so I'd say yes, please just go ahead and queue this :-) Thomas >> --- >> 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 >> >