[Spice-devel] [spice-gtk] Fix VD_AGENT_HAS_CAPABILITY use

Hans de Goede hdegoede at redhat.com
Fri Sep 7 07:10:24 PDT 2012


Looks good, ack.

On 09/07/2012 04:07 PM, Christophe Fergeau wrote:
> The 'size' argument to this macro (defined in
> spice-protocol/spice/vd_agent.h) is the number of 32 bit elements
> available in its first argument. In channel-main.c it's used
> most of the time with SpiceMainChannelPrivate::agent_caps which is
> an uint32_t[VD_AGENT_CAPS_SIZE]. The 'size' argument to pass to
> VD_AGENT_HAS_CAPABILITY is thus the number of elements in this array,
> and not sizeof(agent_caps).
>
> Fixes rhbz#837545
> ---
>   gtk/channel-main.c | 16 ++++++++--------
>   1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/gtk/channel-main.c b/gtk/channel-main.c
> index ff9b0c1..a413ec4 100644
> --- a/gtk/channel-main.c
> +++ b/gtk/channel-main.c
> @@ -1041,7 +1041,7 @@ static void agent_announce_caps(SpiceMainChannel *channel)
>   }
>
>   #define HAS_CLIPBOARD_SELECTION(c) \
> -    VD_AGENT_HAS_CAPABILITY((c)->agent_caps, sizeof((c)->agent_caps), VD_AGENT_CAP_CLIPBOARD_SELECTION)
> +    VD_AGENT_HAS_CAPABILITY((c)->agent_caps, G_N_ELEMENTS((c)->agent_caps), VD_AGENT_CAP_CLIPBOARD_SELECTION)
>
>   /* any context: the message is not flushed immediately,
>      you can wakeup() the channel coroutine or send_msg_queue() */
> @@ -1058,7 +1058,7 @@ static void agent_clipboard_grab(SpiceMainChannel *channel, guint selection,
>           return;
>
>       g_return_if_fail(VD_AGENT_HAS_CAPABILITY(c->agent_caps,
> -        sizeof(c->agent_caps), VD_AGENT_CAP_CLIPBOARD_BY_DEMAND));
> +        G_N_ELEMENTS(c->agent_caps), VD_AGENT_CAP_CLIPBOARD_BY_DEMAND));
>
>       size = sizeof(VDAgentClipboardGrab) + sizeof(uint32_t) * ntypes;
>       if (HAS_CLIPBOARD_SELECTION(c))
> @@ -1098,7 +1098,7 @@ static void agent_clipboard_notify(SpiceMainChannel *channel, guint selection,
>       g_return_if_fail(c->agent_connected);
>
>       g_return_if_fail(VD_AGENT_HAS_CAPABILITY(c->agent_caps,
> -        sizeof(c->agent_caps), VD_AGENT_CAP_CLIPBOARD_BY_DEMAND));
> +        G_N_ELEMENTS(c->agent_caps), VD_AGENT_CAP_CLIPBOARD_BY_DEMAND));
>
>       msgsize = sizeof(VDAgentClipboard);
>       if (HAS_CLIPBOARD_SELECTION(c))
> @@ -1134,7 +1134,7 @@ static void agent_clipboard_request(SpiceMainChannel *channel, guint selection,
>       g_return_if_fail(c->agent_connected);
>
>       g_return_if_fail(VD_AGENT_HAS_CAPABILITY(c->agent_caps,
> -        sizeof(c->agent_caps), VD_AGENT_CAP_CLIPBOARD_BY_DEMAND));
> +        G_N_ELEMENTS(c->agent_caps), VD_AGENT_CAP_CLIPBOARD_BY_DEMAND));
>
>       msgsize = sizeof(VDAgentClipboardRequest);
>       if (HAS_CLIPBOARD_SELECTION(c))
> @@ -1170,7 +1170,7 @@ static void agent_clipboard_release(SpiceMainChannel *channel, guint selection)
>       g_return_if_fail(c->agent_connected);
>
>       g_return_if_fail(VD_AGENT_HAS_CAPABILITY(c->agent_caps,
> -        sizeof(c->agent_caps), VD_AGENT_CAP_CLIPBOARD_BY_DEMAND));
> +        G_N_ELEMENTS(c->agent_caps), VD_AGENT_CAP_CLIPBOARD_BY_DEMAND));
>
>       if (HAS_CLIPBOARD_SELECTION(c)) {
>           msg[0] = selection;
> @@ -1398,7 +1398,7 @@ static void main_agent_handle_msg(SpiceChannel *channel,
>       case VD_AGENT_CLIPBOARD_REQUEST:
>       case VD_AGENT_CLIPBOARD_GRAB:
>       case VD_AGENT_CLIPBOARD:
> -        if (VD_AGENT_HAS_CAPABILITY(c->agent_caps, sizeof(c->agent_caps), VD_AGENT_CAP_CLIPBOARD_SELECTION)) {
> +        if (VD_AGENT_HAS_CAPABILITY(c->agent_caps, G_N_ELEMENTS(c->agent_caps), VD_AGENT_CAP_CLIPBOARD_SELECTION)) {
>               selection = *((guint8*)payload);
>               payload = ((guint8*)payload) + 4;
>               msg->size -= 4;
> @@ -1431,7 +1431,7 @@ static void main_agent_handle_msg(SpiceChannel *channel,
>           if (caps->request)
>               agent_announce_caps(SPICE_MAIN_CHANNEL(channel));
>
> -        if (VD_AGENT_HAS_CAPABILITY(caps->caps, sizeof(c->agent_caps), VD_AGENT_CAP_DISPLAY_CONFIG) &&
> +        if (VD_AGENT_HAS_CAPABILITY(caps->caps, G_N_ELEMENTS(c->agent_caps), VD_AGENT_CAP_DISPLAY_CONFIG) &&
>               !c->agent_display_config_sent) {
>               agent_display_config(SPICE_MAIN_CHANNEL(channel));
>               agent_send_msg_queue(SPICE_MAIN_CHANNEL(channel));
> @@ -2021,7 +2021,7 @@ gboolean spice_main_agent_test_capability(SpiceMainChannel *channel, guint32 cap
>       if (!c->agent_caps_received)
>           return FALSE;
>
> -    return VD_AGENT_HAS_CAPABILITY(c->agent_caps, sizeof(c->agent_caps), cap);
> +    return VD_AGENT_HAS_CAPABILITY(c->agent_caps, G_N_ELEMENTS(c->agent_caps), cap);
>   }
>
>   /**
>


More information about the Spice-devel mailing list