Message ID | 20181114123643.24091-3-marcandre.lureau@redhat.com |
---|---|
State | New |
Headers | show |
Series | RFC: slirp: make it again a standalone project | expand |
Marc-André Lureau, le mer. 14 nov. 2018 16:36:04 +0400, a ecrit: > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org> 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 >
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.lureau@redhat.com> > > Reviewed-by: Samuel Thibault <samuel.thibault@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 >> >
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) /*
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- include/glib-compat.h | 56 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+)