From d1aa25373056ad0c7142ed25a07841cdb8810d45 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 21 Jun 2021 14:54:24 +0200 Subject: [PATCH] qemu: domain: Store capability overrides in NULL-terminated string list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We always process the full list so there's no value in storing the count separately. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- src/qemu/qemu_domain.c | 28 ++++++++++++++-------------- src/qemu/qemu_domain.h | 2 -- src/qemu/qemu_process.c | 13 ++++++------- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 5008883de9..3be5117c1d 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3331,8 +3331,8 @@ qemuDomainXmlNsDefFree(qemuDomainXmlNsDef *def) g_free(def->env); virStringListFreeCount(def->args, def->num_args); - virStringListFreeCount(def->capsadd, def->ncapsadd); - virStringListFreeCount(def->capsdel, def->ncapsdel); + g_strfreev(def->capsadd); + g_strfreev(def->capsdel); g_free(def->deprecationBehavior); @@ -3448,10 +3448,10 @@ qemuDomainDefNamespaceParseCaps(qemuDomainXmlNsDef *nsdef, return -1; if (nnodesadd > 0) { - nsdef->capsadd = g_new0(char *, nnodesadd); + nsdef->capsadd = g_new0(char *, nnodesadd + 1); for (i = 0; i < nnodesadd; i++) { - if (!(nsdef->capsadd[nsdef->ncapsadd++] = virXMLPropString(nodesadd[i], "capability"))) { + if (!(nsdef->capsadd[i] = virXMLPropString(nodesadd[i], "capability"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing capability name")); return -1; @@ -3460,10 +3460,10 @@ qemuDomainDefNamespaceParseCaps(qemuDomainXmlNsDef *nsdef, } if (nnodesdel > 0) { - nsdef->capsdel = g_new0(char *, nnodesdel); + nsdef->capsdel = g_new0(char *, nnodesdel + 1); for (i = 0; i < nnodesdel; i++) { - if (!(nsdef->capsdel[nsdef->ncapsdel++] = virXMLPropString(nodesdel[i], "capability"))) { + if (!(nsdef->capsdel[i] = virXMLPropString(nodesdel[i], "capability"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing capability name")); return -1; @@ -3492,7 +3492,7 @@ qemuDomainDefNamespaceParse(xmlXPathContextPtr ctxt, nsdata->deprecationBehavior = virXPathString("string(./qemu:deprecation/@behavior)", ctxt); if (nsdata->num_args > 0 || nsdata->num_env > 0 || - nsdata->ncapsadd > 0 || nsdata->ncapsdel > 0 || + nsdata->capsadd || nsdata->capsdel || nsdata->deprecationBehavior) *data = g_steal_pointer(&nsdata); @@ -3534,19 +3534,19 @@ static void qemuDomainDefNamespaceFormatXMLCaps(virBuffer *buf, qemuDomainXmlNsDef *xmlns) { - size_t i; + GStrv n; - if (!xmlns->ncapsadd && !xmlns->ncapsdel) + if (!xmlns->capsadd && !xmlns->capsdel) return; virBufferAddLit(buf, "\n"); virBufferAdjustIndent(buf, 2); - for (i = 0; i < xmlns->ncapsadd; i++) - virBufferEscapeString(buf, "\n", xmlns->capsadd[i]); + for (n = xmlns->capsadd; n && *n; n++) + virBufferEscapeString(buf, "\n", *n); - for (i = 0; i < xmlns->ncapsdel; i++) - virBufferEscapeString(buf, "\n", xmlns->capsdel[i]); + for (n = xmlns->capsdel; n && *n; n++) + virBufferEscapeString(buf, "\n", *n); virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "\n"); @@ -6617,7 +6617,7 @@ void qemuDomainObjCheckTaint(virQEMUDriver *driver, qemuDomainXmlNsDef *qemuxmlns = obj->def->namespaceData; if (qemuxmlns->num_args || qemuxmlns->num_env) qemuDomainObjTaint(driver, obj, VIR_DOMAIN_TAINT_CUSTOM_ARGV, logCtxt); - if (qemuxmlns->ncapsadd > 0 || qemuxmlns->ncapsdel > 0) + if (qemuxmlns->capsadd || qemuxmlns->capsdel) custom_hypervisor_feat = true; } diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 5f2814271d..aa3ed78094 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -471,10 +471,8 @@ struct _qemuDomainXmlNsDef { unsigned int num_env; qemuDomainXmlNsEnvTuple *env; - size_t ncapsadd; char **capsadd; - size_t ncapsdel; char **capsdel; /* We deliberately keep this as a string so that it's parsed only when diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 81af4f1a44..4264191a9a 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5484,7 +5484,6 @@ qemuProcessStartUpdateCustomCaps(virDomainObj *vm) qemuDomainXmlNsDef *nsdef = vm->def->namespaceData; char **next; int tmp; - size_t i; if (cfg->capabilityfilters) { for (next = cfg->capabilityfilters; *next; next++) { @@ -5500,22 +5499,22 @@ qemuProcessStartUpdateCustomCaps(virDomainObj *vm) } if (nsdef) { - for (i = 0; i < nsdef->ncapsadd; i++) { - if ((tmp = virQEMUCapsTypeFromString(nsdef->capsadd[i])) < 0) { + for (next = nsdef->capsadd; next && *next; next++) { + if ((tmp = virQEMUCapsTypeFromString(*next)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("invalid qemu namespace capability '%s'"), - nsdef->capsadd[i]); + *next); return -1; } virQEMUCapsSet(priv->qemuCaps, tmp); } - for (i = 0; i < nsdef->ncapsdel; i++) { - if ((tmp = virQEMUCapsTypeFromString(nsdef->capsdel[i])) < 0) { + for (next = nsdef->capsdel; next && *next; next++) { + if ((tmp = virQEMUCapsTypeFromString(*next)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("invalid qemu namespace capability '%s'"), - nsdef->capsdel[i]); + *next); return -1; }