From f608a713f6848e08005205ee125510ccca3a274d Mon Sep 17 00:00:00 2001 From: Li Zhang Date: Mon, 17 Feb 2014 18:17:52 +0800 Subject: [PATCH] conf: Add one interface to add default input devices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use it for the default mouse. Signed-off-by: Li Zhang Signed-off-by: Ján Tomko --- src/conf/domain_conf.c | 51 +++++++++++++++++++++++++++------------- src/conf/domain_conf.h | 4 ++++ src/libvirt_private.syms | 1 + 3 files changed, 40 insertions(+), 16 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 362ba20516..939b4231b1 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -11051,6 +11051,35 @@ virDomainDefMaybeAddController(virDomainDefPtr def, } +int +virDomainDefMaybeAddInput(virDomainDefPtr def, + int type, + int bus) +{ + size_t i; + virDomainInputDefPtr input; + + for (i = 0; i < def->ninputs; i++) { + if (def->inputs[i]->type == type && + def->inputs[i]->bus == bus) + return 0; + } + + if (VIR_ALLOC(input) < 0) + return -1; + + input->type = type; + input->bus = bus; + + if (VIR_APPEND_ELEMENT(def->inputs, def->ninputs, input) < 0) { + VIR_FREE(input); + return -1; + } + + return 0; +} + + /* Parse a memory element located at XPATH within CTXT, and store the * result into MEM. If REQUIRED, then the value must exist; * otherwise, the value is optional. The value is in blocks of 1024. @@ -12464,25 +12493,15 @@ virDomainDefParseXML(xmlDocPtr xml, /* If graphics are enabled, there's an implicit PS2 mouse */ if (def->ngraphics > 0) { - virDomainInputDefPtr input; + int input_bus = VIR_DOMAIN_INPUT_BUS_XEN; - if (VIR_ALLOC(input) < 0) { - goto error; - } - if (STREQ(def->os.type, "hvm")) { - input->type = VIR_DOMAIN_INPUT_TYPE_MOUSE; - input->bus = VIR_DOMAIN_INPUT_BUS_PS2; - } else { - input->type = VIR_DOMAIN_INPUT_TYPE_MOUSE; - input->bus = VIR_DOMAIN_INPUT_BUS_XEN; - } + if (STREQ(def->os.type, "hvm")) + input_bus = VIR_DOMAIN_INPUT_BUS_PS2; - if (VIR_REALLOC_N(def->inputs, def->ninputs + 1) < 0) { - virDomainInputDefFree(input); + if (virDomainDefMaybeAddInput(def, + VIR_DOMAIN_INPUT_TYPE_MOUSE, + input_bus) < 0) goto error; - } - def->inputs[def->ninputs] = input; - def->ninputs++; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 22a927ee7c..bef4a3d4b8 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2806,6 +2806,10 @@ virDomainDefMaybeAddController(virDomainDefPtr def, int type, int idx, int model); +int +virDomainDefMaybeAddInput(virDomainDefPtr def, + int type, + int bus); char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 2eead3d6de..ec786e4b70 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -165,6 +165,7 @@ virDomainDefGenSecurityLabelDef; virDomainDefGetDefaultEmulator; virDomainDefGetSecurityLabelDef; virDomainDefMaybeAddController; +virDomainDefMaybeAddInput; virDomainDefNew; virDomainDefParseFile; virDomainDefParseNode;