[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