[Spice-devel] [PATCH spice-server 2/2] red-channel-client: Pass array size to red_channel_client_prepare_out_msg
Frediano Ziglio
fziglio at redhat.com
Fri Feb 10 14:02:42 UTC 2017
Do not make it assume vec contains IOV_MAX elements.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
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
More information about the Spice-devel
mailing list