From 4b75237fe60694dc16a04f3f5662fd2af1ab1eee Mon Sep 17 00:00:00 2001 From: Pavel Hrdina Date: Wed, 23 Mar 2016 08:55:46 +0100 Subject: [PATCH] domain_conf: introduce virDomainGraphicsListenAppendAddress This effectively removes virDomainGraphicsListenSetAddress which was used only to change the address of listen structure and possible change the listen type. The new function will auto-expand the listens array and append a new listen. The old function was used on pre-allocated array of listens and in most cases it only "add" a new listen. The two remaining uses can access the listen structure directly. Signed-off-by: Pavel Hrdina --- src/conf/domain_conf.c | 33 ++++++++++++++------------------- src/conf/domain_conf.h | 5 ++--- src/libvirt_private.syms | 2 +- src/qemu/qemu_command.c | 6 ++---- src/qemu/qemu_parse_command.c | 4 +++- src/qemu/qemu_process.c | 15 +++++++-------- src/vbox/vbox_common.c | 3 +-- src/vmx/vmx.c | 2 +- src/xenconfig/xen_common.c | 12 +++++------- src/xenconfig/xen_sxpr.c | 4 ++-- src/xenconfig/xen_xl.c | 4 +--- 11 files changed, 39 insertions(+), 51 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 3dfc57ce59..297303079b 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -10693,7 +10693,7 @@ virDomainGraphicsListensParseXML(virDomainGraphicsDefPtr def, /* There were no elements, so we can just * directly set listenAddr as listens[0]->address */ if (listenAddr && def->nListens == 0 && - virDomainGraphicsListenSetAddress(def, 0, listenAddr, -1, true) < 0) + virDomainGraphicsListenAppendAddress(def, listenAddr) < 0) goto error; ret = 0; @@ -23779,31 +23779,26 @@ virDomainGraphicsListenGetAddress(virDomainGraphicsDefPtr def, size_t i) } -/* Make a copy of up to len characters of address, and store it in - * listens[i].address. If setType is true, set the listen's type - * to 'address', otherwise leave type alone. */ int -virDomainGraphicsListenSetAddress(virDomainGraphicsDefPtr def, - size_t i, const char *address, - int len, bool setType) +virDomainGraphicsListenAppendAddress(virDomainGraphicsDefPtr def, + const char *address) { - virDomainGraphicsListenDefPtr listenInfo - = virDomainGraphicsGetListen(def, i, true); + virDomainGraphicsListenDef listen; - if (!listenInfo) - return -1; + memset(&listen, 0, sizeof(listen)); - if (setType) - listenInfo->type = VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS; + listen.type = VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS; - if (!address) { - VIR_FREE(listenInfo->address); - return 0; - } + if (VIR_STRDUP(listen.address, address) < 0) + goto error; + + if (VIR_APPEND_ELEMENT_COPY(def->listens, def->nListens, listen) < 0) + goto error; - if (VIR_STRNDUP(listenInfo->address, address, len) < 0) - return -1; return 0; + error: + VIR_FREE(listen.address); + return -1; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 6f93def265..68b581f504 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2819,9 +2819,8 @@ int virDomainGraphicsListenSetType(virDomainGraphicsDefPtr def, size_t i, int va const char *virDomainGraphicsListenGetAddress(virDomainGraphicsDefPtr def, size_t i) ATTRIBUTE_NONNULL(1); -int virDomainGraphicsListenSetAddress(virDomainGraphicsDefPtr def, - size_t i, const char *address, - int len, bool setType) +int virDomainGraphicsListenAppendAddress(virDomainGraphicsDefPtr def, + const char *address) ATTRIBUTE_NONNULL(1); const char *virDomainGraphicsListenGetNetwork(virDomainGraphicsDefPtr def, size_t i) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a79d85e777..1f26a2406c 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -300,10 +300,10 @@ virDomainGetFilesystemForTarget; virDomainGraphicsAuthConnectedTypeFromString; virDomainGraphicsAuthConnectedTypeToString; virDomainGraphicsDefFree; +virDomainGraphicsListenAppendAddress; virDomainGraphicsListenGetAddress; virDomainGraphicsListenGetNetwork; virDomainGraphicsListenGetType; -virDomainGraphicsListenSetAddress; virDomainGraphicsListenSetNetwork; virDomainGraphicsListenSetType; virDomainGraphicsSpiceChannelModeTypeFromString; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index bd82682893..217728fda8 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7270,8 +7270,7 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg, listenAddr = netAddr; /* store the address we found in the element so it * will show up in status. */ - if (virDomainGraphicsListenSetAddress(graphics, 0, - listenAddr, -1, false) < 0) + if (VIR_STRDUP(graphics->listens[0].address, listenAddr) < 0) goto error; break; } @@ -7425,8 +7424,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, listenAddr = netAddr; /* store the address we found in the element so it will * show up in status. */ - if (virDomainGraphicsListenSetAddress(graphics, 0, - listenAddr, -1, false) < 0) + if (VIR_STRDUP(graphics->listens[0].address, listenAddr) < 0) goto error; break; } diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c index 8b294a7df0..6fbb702b5b 100644 --- a/src/qemu/qemu_parse_command.c +++ b/src/qemu/qemu_parse_command.c @@ -519,6 +519,7 @@ qemuParseCommandLineVnc(virDomainDefPtr def, char *opts; char *port; const char *sep = ":"; + char *listenAddr = NULL; if (val[0] == '[') sep = "]:"; tmp = strstr(val, sep); @@ -536,7 +537,8 @@ qemuParseCommandLineVnc(virDomainDefPtr def, } if (val[0] == '[') val++; - if (virDomainGraphicsListenSetAddress(vnc, 0, val, tmp-val, true) < 0) + if (VIR_STRNDUP(listenAddr, val, tmp-val) < 0 || + virDomainGraphicsListenAppendAddress(vnc, listenAddr) < 0) goto cleanup; if (*opts == ',') { diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 6c870f54f8..1e1d748eaf 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4291,15 +4291,14 @@ qemuProcessSetupGraphics(virQEMUDriverPtr driver, if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC || graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { if (graphics->nListens == 0) { - if (VIR_EXPAND_N(graphics->listens, graphics->nListens, 1) < 0) + const char *listenAddr + = graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC ? + cfg->vncListen : cfg->spiceListen; + + if (virDomainGraphicsListenAppendAddress(graphics, + listenAddr) < 0) goto cleanup; - graphics->listens[0].type = VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS; - if (VIR_STRDUP(graphics->listens[0].address, - graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC ? - cfg->vncListen : cfg->spiceListen) < 0) { - VIR_SHRINK_N(graphics->listens, graphics->nListens, 1); - goto cleanup; - } + graphics->listens[0].fromConfig = true; } else if (graphics->nListens > 1) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index c305eb597c..dcb2c1e871 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -3386,8 +3386,7 @@ vboxDumpDisplay(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine) } if (STRNEQ_NULLABLE(netAddressUtf8, "") && - virDomainGraphicsListenSetAddress(graphics, 0, - netAddressUtf8, -1, true) < 0) + virDomainGraphicsListenAppendAddress(graphics, netAddressUtf8) < 0) goto cleanup; gVBoxAPI.UIVRDxServer.GetAllowMultiConnection(VRDxServer, &allowMultiConnection); diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index f77a7a4b1f..abed862434 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -1875,7 +1875,7 @@ virVMXParseVNC(virConfPtr conf, virDomainGraphicsDefPtr *def) } if (listenAddr) { - if (virDomainGraphicsListenSetAddress(*def, 0, listenAddr, -1, true) < 0) + if (virDomainGraphicsListenAppendAddress(*def, listenAddr) < 0) goto failure; VIR_FREE(listenAddr); } diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c index 4dcd484e09..d58b69c661 100644 --- a/src/xenconfig/xen_common.c +++ b/src/xenconfig/xen_common.c @@ -595,12 +595,10 @@ xenParseVfb(virConfPtr conf, virDomainDefPtr def) if (xenConfigCopyStringOpt(conf, "vnclisten", &listenAddr) < 0) goto cleanup; if (listenAddr && - virDomainGraphicsListenSetAddress(graphics, 0, listenAddr, - -1, true) < 0) { - goto cleanup; - } - + virDomainGraphicsListenAppendAddress(graphics, listenAddr) < 0) + goto cleanup; VIR_FREE(listenAddr); + if (xenConfigCopyStringOpt(conf, "vncpasswd", &graphics->data.vnc.auth.passwd) < 0) goto cleanup; if (xenConfigCopyStringOpt(conf, "keymap", &graphics->data.vnc.keymap) < 0) @@ -666,8 +664,8 @@ xenParseVfb(virConfPtr conf, virDomainDefPtr def) if (STREQ(key + 10, "1")) graphics->data.vnc.autoport = true; } else if (STRPREFIX(key, "vnclisten=")) { - if (virDomainGraphicsListenSetAddress(graphics, 0, key+10, - -1, true) < 0) + if (virDomainGraphicsListenAppendAddress(graphics, + key+10) < 0) goto cleanup; } else if (STRPREFIX(key, "vncpasswd=")) { if (VIR_STRDUP(graphics->data.vnc.auth.passwd, key + 10) < 0) diff --git a/src/xenconfig/xen_sxpr.c b/src/xenconfig/xen_sxpr.c index fdfec2b7d7..20ad5c8664 100644 --- a/src/xenconfig/xen_sxpr.c +++ b/src/xenconfig/xen_sxpr.c @@ -868,7 +868,7 @@ xenParseSxprGraphicsOld(virDomainDefPtr def, graphics->data.vnc.port = port; if (listenAddr && - virDomainGraphicsListenSetAddress(graphics, 0, listenAddr, -1, true) < 0) + virDomainGraphicsListenAppendAddress(graphics, listenAddr) < 0) goto error; if (VIR_STRDUP(graphics->data.vnc.auth.passwd, vncPasswd) < 0) @@ -987,7 +987,7 @@ xenParseSxprGraphicsNew(virDomainDefPtr def, graphics->data.vnc.port = port; if (listenAddr && - virDomainGraphicsListenSetAddress(graphics, 0, listenAddr, -1, true) < 0) + virDomainGraphicsListenAppendAddress(graphics, listenAddr) < 0) goto error; if (VIR_STRDUP(graphics->data.vnc.auth.passwd, vncPasswd) < 0) diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c index 98a7fa6a26..de5d047661 100644 --- a/src/xenconfig/xen_xl.c +++ b/src/xenconfig/xen_xl.c @@ -187,10 +187,8 @@ xenParseXLSpice(virConfPtr conf, virDomainDefPtr def) if (xenConfigCopyStringOpt(conf, "spicehost", &listenAddr) < 0) goto cleanup; if (listenAddr && - virDomainGraphicsListenSetAddress(graphics, 0, listenAddr, - -1, true) < 0) { + virDomainGraphicsListenAppendAddress(graphics, listenAddr) < 0) goto cleanup; - } VIR_FREE(listenAddr); if (xenConfigGetULong(conf, "spicetls_port", &port, 0) < 0)