[libvirt] [PATCH] virkeycode: Allow ANSI_A

Jiri Denemark jdenemar at redhat.com
Thu Dec 19 17:07:36 UTC 2013


On Thu, Dec 19, 2013 at 16:46:50 +0100, Michal Privoznik wrote:
> https://bugzilla.redhat.com/show_bug.cgi?id=1044806
> 
> Currently, sending the ANSI_A keycode from os_x codepage doesn't work as
> it has a special value of 0x0. Our internal code handles that no
> different to other not defined keycodes. Hence, in order to allow it we
> must change all the undefined keycodes from 0 to -1 and adapt some code
> too.
> 
>   # virsh send-key guestname --codeset os_x ANSI_A
>   error: invalid keycode: 'ANSI_A'
> 
>   # virsh send-key guestname --codeset os_x ANSI_B
>   # virsh send-key guestname --codeset os_x ANSI_C
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  src/util/virkeycode-mapgen.py | 4 ++--
>  src/util/virkeycode.c         | 4 ++--
>  tools/virsh-domain.c          | 2 +-
>  3 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/src/util/virkeycode-mapgen.py b/src/util/virkeycode-mapgen.py
> index 22b21b4..8360bfe 100755
> --- a/src/util/virkeycode-mapgen.py
> +++ b/src/util/virkeycode-mapgen.py
> @@ -86,12 +86,12 @@ for i in range(len(cols)):
>      if isname:
>          print "const char *virKeymapNames_" + name + "[] = {"
>      else:
> -        print "unsigned short virKeymapValues_" + name + "[] = {"
> +        print "int virKeymapValues_" + name + "[] = {"
>  
>      for entry in keycodes:
>          if isname:
>              print "  " + quotestring(entry[i] or "NULL") + ","
>          else:
> -            print "  " + (entry[i] or "0") + ","
> +            print "  " + (entry[i] or "-1") + ","
>  
>      print "};\n"
> diff --git a/src/util/virkeycode.c b/src/util/virkeycode.c
> index 50594d6..7880a0a 100644
> --- a/src/util/virkeycode.c
> +++ b/src/util/virkeycode.c
> @@ -50,7 +50,7 @@ static const char **virKeymapNames[] = {
>  };
>  verify(ARRAY_CARDINALITY(virKeymapNames) == VIR_KEYCODE_SET_LAST);
>  
> -static unsigned short *virKeymapValues[] = {
> +static int *virKeymapValues[] = {
>      [VIR_KEYCODE_SET_LINUX] =
>        virKeymapValues_linux,
>      [VIR_KEYCODE_SET_XT] =
> @@ -113,7 +113,7 @@ int virKeycodeValueTranslate(virKeycodeSet from_codeset,
>  {
>      size_t i;
>  
> -    if (key_value <= 0)
> +    if (key_value < 0)
>          return -1;
>  
>  
> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
> index 760dca5..b33b808 100644
> --- a/tools/virsh-domain.c
> +++ b/tools/virsh-domain.c
> @@ -7091,7 +7091,7 @@ cmdSendKey(vshControl *ctl, const vshCmd *cmd)
>          }
>  
>          if ((keycode = vshKeyCodeGetInt(opt->data)) <= 0) {

This <= 0 above is suspicious too, isn't it?

> -            if ((keycode = virKeycodeValueFromString(codeset, opt->data)) <= 0) {
> +            if ((keycode = virKeycodeValueFromString(codeset, opt->data)) < 0) {
>                  vshError(ctl, _("invalid keycode: '%s'"), opt->data);
>                  goto cleanup;
>              }

Jirka




More information about the libvir-list mailing list