marshaller: track if add_fd() was given -1

In some cases, it might be worth to be able to send a message with a -1
fd, has the protocol permits. Change add_fd/get_fd in order to track
if the caller wanted to send -1.

Signed-off-by: Marc-André Lureau <marcandre.lureau@gmail.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
This commit is contained in:
Marc-Andre Lureau 2016-01-22 18:04:35 +01:00 committed by Frediano Ziglio
parent 6424c0baee
commit 472e563591
2 changed files with 17 additions and 9 deletions

View File

@ -87,6 +87,7 @@ struct SpiceMarshaller {
MarshallerItem *items;
MarshallerItem static_items[N_STATIC_ITEMS];
bool has_fd;
int fd;
};
@ -624,19 +625,25 @@ void *spice_marshaller_add_int8(SpiceMarshaller *m, int8_t v)
void spice_marshaller_add_fd(SpiceMarshaller *m, int fd)
{
spice_assert(m->fd == -1);
spice_assert(m->has_fd == false);
m->fd = dup(fd);
if (m->fd == -1) {
perror("dup");
m->has_fd = true;
if (fd != -1) {
m->fd = dup(fd);
if (m->fd == -1) {
perror("dup");
}
} else {
m->fd = -1;
}
}
int spice_marshaller_get_fd(SpiceMarshaller *m)
bool spice_marshaller_get_fd(SpiceMarshaller *m, int *fd)
{
int fd = m->fd;
bool had_fd = m->has_fd;
m->fd = -1;
*fd = m->fd;
m->has_fd = false;
return fd;
return had_fd;
}

View File

@ -19,6 +19,7 @@
#ifndef _H_MARSHALLER
#define _H_MARSHALLER
#include <stdbool.h>
#include <spice/macros.h>
#include <spice/types.h>
#include "mem.h"
@ -67,7 +68,7 @@ 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);
bool spice_marshaller_get_fd(SpiceMarshaller *m, int *fd);
SPICE_END_DECLS