Do not make it assume vec contains IOV_MAX elements. Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- server/red-channel-client.c | 12 +++++++----- server/red-channel-client.h | 4 ++-- server/red-channel.h | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/server/red-channel-client.c b/server/red-channel-client.c index 5ef6fd4..68f133a 100644 --- a/server/red-channel-client.c +++ b/server/red-channel-client.c @@ -398,13 +398,13 @@ int red_channel_client_get_out_msg_size(void *opaque) return rcc->priv->send_data.size; } -void red_channel_client_prepare_out_msg(void *opaque, struct iovec *vec, - int *vec_size, int pos) +int red_channel_client_prepare_out_msg(void *opaque, struct iovec *vec, + int vec_size, int pos) { RedChannelClient *rcc = RED_CHANNEL_CLIENT(opaque); - *vec_size = spice_marshaller_fill_iovec(rcc->priv->send_data.marshaller, - vec, IOV_MAX, pos); + return spice_marshaller_fill_iovec(rcc->priv->send_data.marshaller, + vec, vec_size, pos); } void red_channel_client_on_out_block(void *opaque) @@ -1014,7 +1014,9 @@ static void red_peer_handle_outgoing(RedsStream *stream, OutgoingHandler *handle } for (;;) { - handler->cb->prepare(handler->opaque, handler->vec, &handler->vec_size, handler->pos); + handler->vec_size = + handler->cb->prepare(handler->opaque, handler->vec, G_N_ELEMENTS(handler->vec), + handler->pos); n = reds_stream_writev(stream, handler->vec, handler->vec_size); if (n == -1) { switch (errno) { diff --git a/server/red-channel-client.h b/server/red-channel-client.h index fada609..3c9fcec 100644 --- a/server/red-channel-client.h +++ b/server/red-channel-client.h @@ -178,8 +178,8 @@ RedChannel* red_channel_client_get_channel(RedChannelClient *rcc); void red_channel_client_on_output(void *opaque, int n); void red_channel_client_on_input(void *opaque, int n); int red_channel_client_get_out_msg_size(void *opaque); -void red_channel_client_prepare_out_msg(void *opaque, struct iovec *vec, - int *vec_size, int pos); +int red_channel_client_prepare_out_msg(void *opaque, struct iovec *vec, + int vec_size, int pos); void red_channel_client_on_out_block(void *opaque); void red_channel_client_on_out_msg_done(void *opaque); diff --git a/server/red-channel.h b/server/red-channel.h index f2866f5..a187087 100644 --- a/server/red-channel.h +++ b/server/red-channel.h @@ -80,7 +80,7 @@ typedef struct IncomingHandlerInterface { } IncomingHandlerInterface; typedef int (*get_outgoing_msg_size_proc)(void *opaque); -typedef void (*prepare_outgoing_proc)(void *opaque, struct iovec *vec, int *vec_size, int pos); +typedef int (*prepare_outgoing_proc)(void *opaque, struct iovec *vec, int vec_size, int pos); typedef void (*on_outgoing_error_proc)(void *opaque); typedef void (*on_outgoing_block_proc)(void *opaque); typedef void (*on_outgoing_msg_done_proc)(void *opaque); -- 2.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel