[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: |
Thomas Huth |
Subject: |
Re: [Qemu-devel] [PATCH for-3.2 02/41] glib-compat: add g_spawn_async_with_fds() fallback |
Date: |
Tue, 20 Nov 2018 07:11:43 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 |
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 <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?
$ 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
>>
>