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