[Spice-devel] [PATCH spice-common 1/2] marshaller: learn to describe fd passing in messages
Marc-André Lureau
marcandre.lureau at gmail.com
Mon Dec 21 08:21:27 PST 2015
hi
On Wed, Dec 16, 2015 at 12:27 AM, Marc-André Lureau
<marcandre.lureau at gmail.com> wrote:
> The marshaller can't serialize fd in memory stream. Instead, append the
> fd to the marshaller structure. The marshaller user is responsible for
> sending the fd when the message is sent. The fd to send can be retrieved
> with spice_marshaller_get_fd().
>
> Note: only a single fd is supported with this API, supporting multiple
> fd is left for the future if it becomes necessary.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau at gmail.com>
Any comment about this marshaller addition? (see related server
changes http://lists.freedesktop.org/archives/spice-devel/2015-December/024982.html)
> ---
> common/marshaller.c | 24 ++++++++++++++++++++++++
> common/marshaller.h | 3 +++
> 2 files changed, 27 insertions(+)
>
> diff --git a/common/marshaller.c b/common/marshaller.c
> index cedb321..c967371 100644
> --- a/common/marshaller.c
> +++ b/common/marshaller.c
> @@ -19,11 +19,14 @@
> #include <config.h>
> #endif
>
> +#include "log.h"
> #include "marshaller.h"
> #include "mem.h"
> #include <string.h>
> #include <stdlib.h>
> #include <assert.h>
> +#include <unistd.h>
> +#include <stdio.h>
>
> #ifdef WORDS_BIGENDIAN
> #define write_int8(ptr,v) (*((int8_t *)(ptr)) = v)
> @@ -84,6 +87,7 @@ struct SpiceMarshaller {
> MarshallerItem *items;
>
> MarshallerItem static_items[N_STATIC_ITEMS];
> + int fd;
> };
>
> struct SpiceMarshallerData {
> @@ -111,6 +115,7 @@ static void spice_marshaller_init(SpiceMarshaller *m,
> m->n_items = 0;
> m->items_size = N_STATIC_ITEMS;
> m->items = m->static_items;
> + m->fd = -1;
> }
>
> SpiceMarshaller *spice_marshaller_new(void)
> @@ -613,3 +618,22 @@ void *spice_marshaller_add_int8(SpiceMarshaller *m, int8_t v)
> write_int8(ptr, v);
> return (void *)ptr;
> }
> +
> +void spice_marshaller_add_fd(SpiceMarshaller *m, int fd)
> +{
> + spice_assert(m->fd == -1);
> +
> + m->fd = dup(fd);
> + if (m->fd == -1) {
> + perror("dup");
> + }
> +}
> +
> +int spice_marshaller_get_fd(SpiceMarshaller *m)
> +{
> + int fd = m->fd;
> +
> + m->fd = -1;
> +
> + return fd;
> +}
> diff --git a/common/marshaller.h b/common/marshaller.h
> index e19c0f6..b698b69 100644
> --- a/common/marshaller.h
> +++ b/common/marshaller.h
> @@ -66,6 +66,9 @@ void *spice_marshaller_add_int8(SpiceMarshaller *m, int8_t v);
>
> void spice_marshaller_set_uint32(SpiceMarshaller *m, void *ref, uint32_t v);
>
> +void spice_marshaller_add_fd(SpiceMarshaller *m, int fd);
> +int spice_marshaller_get_fd(SpiceMarshaller *m);
> +
> SPICE_END_DECLS
>
> #endif
> --
> 2.5.0
>
--
Marc-André Lureau
More information about the Spice-devel
mailing list