The code generating XML for storage pool source discovery is hardcoded to only allow a hostname and optional port number. Refactor this code to make it easier to add support for extra parameters. * tools/virsh.c: Refactor XML generator --- tools/virsh.c | 26 ++++++++++---------------- 1 files changed, 10 insertions(+), 16 deletions(-) diff --git a/tools/virsh.c b/tools/virsh.c index d15a8df..6fc1b47 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -5767,7 +5767,6 @@ cmdPoolDiscoverSourcesAs(vshControl * ctl, const vshCmd * cmd ATTRIBUTE_UNUSED) if (host) { size_t hostlen = strlen(host); char *port = vshCommandOptString(cmd, "port", &found); - int ret; if (!found) { port = strrchr(host, ':'); if (port) { @@ -5777,23 +5776,18 @@ cmdPoolDiscoverSourcesAs(vshControl * ctl, const vshCmd * cmd ATTRIBUTE_UNUSED) port = NULL; } } - ret = port ? - virAsprintf(&srcSpec, - "<source><host name='%.*s' port='%s'/></source>", - (int)hostlen, host, port) : - virAsprintf(&srcSpec, - "<source><host name='%.*s'/></source>", - (int)hostlen, host); - if (ret < 0) { - switch (errno) { - case ENOMEM: - vshError(ctl, "%s", _("Out of memory")); - break; - default: - vshError(ctl, _("virAsprintf failed (errno %d)"), errno); - } + virBuffer buf = VIR_BUFFER_INITIALIZER; + virBufferAddLit(&buf, "<source>\n"); + virBufferVSprintf(&buf, " <host name='%.*s'",(int)hostlen, host); + if (port) + virBufferVSprintf(&buf, " port='%s'", port); + virBufferAddLit(&buf, "/>\n"); + virBufferAddLit(&buf, "</source>\n"); + if (virBufferError(&buf)) { + vshError(ctl, "%s", _("Out of memory")); return FALSE; } + srcSpec = virBufferContentAndReset(&buf); } srcList = virConnectFindStoragePoolSources(ctl->conn, type, srcSpec, 0); -- 1.7.2.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list