[Spice-devel] [PATCH v2 5/7] spice-ppc: avoid casts to lessers types!

Fabiano Fidêncio fabiano at fidencio.org
Mon Aug 13 07:39:14 PDT 2012


On Mon, Aug 13, 2012 at 11:14 AM, Erlon Cruz
<erlon.cruz at br.flextronics.com> wrote:
> From: Fabiano Fidêncio <fabiano at fidencio.org>
>
>     It's breaking PPC's keyboard functionality, once this cast is
>     getting the first byte (from left to right) on any architecture,
>     what's wrong when we think in a PPC (we should get the last one,
>     instead).
>
> Signed-off-by: Erlon R. Cruz <erlon.cruz at br.flextronics.com>
> Signed-off-by: Rafael F. Santos <fonsecasantos.rafael at gmail.com>
> Signed-off-by: Fabiano Fidêncio <Fabiano.Fidêncio at fit-tecnologia.org.br>

My email is wrong here.

> ---
>  server/inputs_channel.c |   24 ++++++++++++------------
>  1 files changed, 12 insertions(+), 12 deletions(-)
>
> diff --git a/server/inputs_channel.c b/server/inputs_channel.c
> index e14e995..aa1cba9 100644
> --- a/server/inputs_channel.c
> +++ b/server/inputs_channel.c
> @@ -289,28 +289,28 @@ static int inputs_channel_handle_parsed(RedChannelClient *rcc, uint32_t size, ui
>  {
>      InputsChannel *inputs_channel = (InputsChannel *)rcc->channel;
>      InputsChannelClient *icc = (InputsChannelClient *)rcc;
> -    uint8_t *buf = (uint8_t *)message;
>
>      spice_assert(g_inputs_channel == inputs_channel);
>      switch (type) {
>      case SPICE_MSGC_INPUTS_KEY_DOWN: {
> -        SpiceMsgcKeyDown *key_up = (SpiceMsgcKeyDown *)buf;
> +        SpiceMsgcKeyDown *key_up = (SpiceMsgcKeyDown *)message;

Looks like remove buf and use directly message should be a different commit.

>          if (key_up->code == CAPS_LOCK_SCAN_CODE || key_up->code == NUM_LOCK_SCAN_CODE ||
>              key_up->code == SCROLL_LOCK_SCAN_CODE) {
>              activate_modifiers_watch();
>          }
>      }
>      case SPICE_MSGC_INPUTS_KEY_UP: {
> -        SpiceMsgcKeyDown *key_down = (SpiceMsgcKeyDown *)buf;
> -        uint8_t *now = (uint8_t *)&key_down->code;
> -        uint8_t *end = now + sizeof(key_down->code);
> -        for (; now < end && *now; now++) {
> -            kbd_push_scan(keyboard, *now);
> +        SpiceMsgcKeyDown *key_down = (SpiceMsgcKeyDown *)message;

As teuf pointed, it should be SpiceMsgcKeyUp *key_up = (SpiceMsgcKeyUp
*)message; and should be in a different commit.

> +        uint32_t code = key_down->code;
> +
> +        for (; code != 0; code >>= 8) {
> +            kbd_push_scan(keyboard, code & 0xff);
>          }
> +
>          break;
>      }
>      case SPICE_MSGC_INPUTS_MOUSE_MOTION: {
> -        SpiceMsgcMouseMotion *mouse_motion = (SpiceMsgcMouseMotion *)buf;
> +        SpiceMsgcMouseMotion *mouse_motion = (SpiceMsgcMouseMotion *)message;
>
>          if (++icc->motion_count % SPICE_INPUT_MOTION_ACK_BUNCH == 0) {
>              red_channel_client_pipe_add_type(rcc, PIPE_ITEM_MOUSE_MOTION_ACK);
> @@ -325,7 +325,7 @@ static int inputs_channel_handle_parsed(RedChannelClient *rcc, uint32_t size, ui
>          break;
>      }
>      case SPICE_MSGC_INPUTS_MOUSE_POSITION: {
> -        SpiceMsgcMousePosition *pos = (SpiceMsgcMousePosition *)buf;
> +        SpiceMsgcMousePosition *pos = (SpiceMsgcMousePosition *)message;
>
>          if (++icc->motion_count % SPICE_INPUT_MOTION_ACK_BUNCH == 0) {
>              red_channel_client_pipe_add_type(rcc, PIPE_ITEM_MOUSE_MOTION_ACK);
> @@ -349,7 +349,7 @@ static int inputs_channel_handle_parsed(RedChannelClient *rcc, uint32_t size, ui
>          break;
>      }
>      case SPICE_MSGC_INPUTS_MOUSE_PRESS: {
> -        SpiceMsgcMousePress *mouse_press = (SpiceMsgcMousePress *)buf;
> +        SpiceMsgcMousePress *mouse_press = (SpiceMsgcMousePress *)message;
>          int dz = 0;
>          if (mouse_press->button == SPICE_MOUSE_BUTTON_UP) {
>              dz = -1;
> @@ -377,7 +377,7 @@ static int inputs_channel_handle_parsed(RedChannelClient *rcc, uint32_t size, ui
>          break;
>      }
>      case SPICE_MSGC_INPUTS_MOUSE_RELEASE: {
> -        SpiceMsgcMouseRelease *mouse_release = (SpiceMsgcMouseRelease *)buf;
> +        SpiceMsgcMouseRelease *mouse_release = (SpiceMsgcMouseRelease *)message;
>          if (reds_get_mouse_mode() == SPICE_MOUSE_MODE_CLIENT) {
>              if (reds_get_agent_mouse() && reds_has_vdagent()) {
>                  inputs_channel->mouse_state.buttons =
> @@ -397,7 +397,7 @@ static int inputs_channel_handle_parsed(RedChannelClient *rcc, uint32_t size, ui
>          break;
>      }
>      case SPICE_MSGC_INPUTS_KEY_MODIFIERS: {
> -        SpiceMsgcKeyModifiers *modifiers = (SpiceMsgcKeyModifiers *)buf;
> +        SpiceMsgcKeyModifiers *modifiers = (SpiceMsgcKeyModifiers *)message;
>          uint8_t leds;
>
>          if (!keyboard) {
> --
> 1.7.4.1
>



-- 
Fabiano Fidêncio


More information about the Spice-devel mailing list