From 2ac455c4d26315736dd897748dd4c175ab7fd0b7 Mon Sep 17 00:00:00 2001 From: Michal Novotny Date: Thu, 14 Apr 2011 18:05:14 +0200 Subject: [PATCH] Introduce virDomainChrDefNew() Make: passed Make check: passed Make syntax-check: passed this is the commit to introduce the function to create new character device definition for the domain as advised by Cole Robinson . The function is used on the relevant places and also new tests has been added. Signed-off-by: Michal Novotny --- src/conf/domain_conf.c | 20 ++++++++-- src/conf/domain_conf.h | 2 + src/libvirt_private.syms | 1 + src/qemu/qemu_command.c | 5 ++- src/xenxs/xen_sxpr.c | 7 ++-- src/xenxs/xen_xm.c | 8 +++- .../qemuxml2argv-serial-target-port-auto.xml | 31 ++++++++++++++++ ...qemuxml2xmlout-serial-target-port-auto.xml | 37 +++++++++++++++++++ tests/qemuxml2xmltest.c | 1 + 9 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-serial-target-port-auto.xml create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-serial-target-port-auto.xml diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 4afc489642..c827ef564a 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -3243,6 +3243,22 @@ error: goto cleanup; } +/* Create a new character device definition and set + * default port. + */ +virDomainChrDefPtr +virDomainChrDefNew(void) { + virDomainChrDefPtr def = NULL; + + if (VIR_ALLOC(def) < 0) { + virReportOOMError(); + return NULL; + } + + def->target.port = -1; + return def; +} + /* Parse the XML definition for a character device * @param node XML nodeset to parse for net definition * @@ -3291,10 +3307,8 @@ virDomainChrDefParseXML(virCapsPtr caps, virDomainChrDefPtr def; int remaining; - if (VIR_ALLOC(def) < 0) { - virReportOOMError(); + if (!(def = virDomainChrDefNew())) return NULL; - } type = virXMLPropString(node, "type"); if (type == NULL) { diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 60a33ceab7..6ea30b9c8f 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1271,6 +1271,8 @@ void virDomainObjRef(virDomainObjPtr vm); /* Returns 1 if the object was freed, 0 if more refs exist */ int virDomainObjUnref(virDomainObjPtr vm) ATTRIBUTE_RETURN_CHECK; +virDomainChrDefPtr virDomainChrDefNew(void); + /* live == true means def describes an active domain (being migrated or * restored) as opposed to a new persistent configuration of the domain */ virDomainObjPtr virDomainAssignDef(virCapsPtr caps, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index d2aa07743b..ba7739dd1d 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -201,6 +201,7 @@ virDomainChrConsoleTargetTypeFromString; virDomainChrConsoleTargetTypeToString; virDomainChrDefForeach; virDomainChrDefFree; +virDomainChrDefNew; virDomainChrSourceDefFree; virDomainChrSpicevmcTypeFromString; virDomainChrSpicevmcTypeToString; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 89668d4463..71e506268a 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -36,6 +36,7 @@ #include "c-ctype.h" #include "domain_nwfilter.h" #include "qemu_audit.h" +#include "domain_conf.h" #include #include @@ -5327,8 +5328,8 @@ qemuParseCommandLineChr(const char *val) { virDomainChrDefPtr def; - if (VIR_ALLOC(def) < 0) - goto no_memory; + if (!(def = virDomainChrDefNew())) + goto error; if (STREQ(val, "null")) { def->source.type = VIR_DOMAIN_CHR_TYPE_NULL; diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c index 3a412a68e8..b590517be9 100644 --- a/src/xenxs/xen_sxpr.c +++ b/src/xenxs/xen_sxpr.c @@ -168,10 +168,8 @@ xenParseSxprChar(const char *value, char *tmp; virDomainChrDefPtr def; - if (VIR_ALLOC(def) < 0) { - virReportOOMError(); + if (!(def = virDomainChrDefNew())) return NULL; - } prefix = value; @@ -1328,6 +1326,7 @@ xenParseSxpr(const struct sexpr *root, goto no_memory; } chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL; + chr->target.port = 0; def->serials[def->nserials++] = chr; } } @@ -1343,6 +1342,7 @@ xenParseSxpr(const struct sexpr *root, goto no_memory; } chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL; + chr->target.port = 0; def->parallels[def->nparallels++] = chr; } } else { @@ -1350,6 +1350,7 @@ xenParseSxpr(const struct sexpr *root, if (!(def->console = xenParseSxprChar("pty", tty))) goto error; def->console->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE; + def->console->target.port = 0; def->console->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN; } VIR_FREE(tty); diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c index 22ad7883c9..89f75a58de 100644 --- a/src/xenxs/xen_xm.c +++ b/src/xenxs/xen_xm.c @@ -36,6 +36,7 @@ #include "xenxs_private.h" #include "xen_xm.h" #include "xen_sxpr.h" +#include "domain_conf.h" /* Convenience method to grab a int from the config file object */ static int xenXMConfigGetBool(virConfPtr conf, @@ -957,6 +958,7 @@ xenParseXM(virConfPtr conf, int xendConfigVersion, goto no_memory; } chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL; + chr->target.port = 0; def->parallels[0] = chr; def->nparallels++; chr = NULL; @@ -981,8 +983,8 @@ xenParseXM(virConfPtr conf, int xendConfigVersion, continue; } - if (VIR_ALLOC(chr) < 0) - goto no_memory; + if (!(chr = virDomainChrDefNew())) + goto cleanup; if (!(chr = xenParseSxprChar(port, NULL))) goto cleanup; @@ -1010,6 +1012,7 @@ xenParseXM(virConfPtr conf, int xendConfigVersion, goto no_memory; } chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL; + chr->target.port = 0; def->serials[0] = chr; def->nserials++; } @@ -1018,6 +1021,7 @@ xenParseXM(virConfPtr conf, int xendConfigVersion, if (!(def->console = xenParseSxprChar("pty", NULL))) goto cleanup; def->console->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE; + def->console->target.port = 0; def->console->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN; } diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-target-port-auto.xml b/tests/qemuxml2argvdata/qemuxml2argv-serial-target-port-auto.xml new file mode 100644 index 0000000000..0f98f51620 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-target-port-auto.xml @@ -0,0 +1,31 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 + 219100 + 1 + + hvm + + + + destroy + restart + destroy + + /usr/bin/qemu + + + +
+ + + + + + + + + + + diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-serial-target-port-auto.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-serial-target-port-auto.xml new file mode 100644 index 0000000000..878418a7a2 --- /dev/null +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-serial-target-port-auto.xml @@ -0,0 +1,37 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 + 219100 + 1 + + hvm + + + + destroy + restart + destroy + + /usr/bin/qemu + + + +
+ + + + + + + + + + + + + + + + + diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index b86dbee5f2..27330a97bc 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -195,6 +195,7 @@ mymain(int argc, char **argv) DO_TEST_DIFFERENT("console-compat-auto"); DO_TEST_DIFFERENT("disk-scsi-device-auto"); DO_TEST_DIFFERENT("console-virtio"); + DO_TEST_DIFFERENT("serial-target-port-auto"); virCapabilitiesFree(driver.caps);