From: Cole Robinson Date: Wed, 13 Mar 2019 15:02:41 +0000 (-0400) Subject: conf: Make net model enum compare case insensitive X-Git-Tag: v5.3.0-rc1~50 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79c8bc7d6e460cff7fdc30186bf1d99f1c902121;p=thirdparty%2Flibvirt.git conf: Make net model enum compare case insensitive vbox and vmx drivers do net case insensitive net model comparisons, so for example 'VMXNET3' and 'vmxnet3' and 'VmxNeT3' in the XML will translate to the same driver configuration. To convert these drivers to use net model enum, we will need to do case insensitive comparisons as well. Essentially we implement virEnumToString, but with case insensitive comparison. XML will always be formatted with the enum model string we track internally, but we will accept any case insensitive variant. Acked-by: Michal Privoznik Signed-off-by: Cole Robinson --- diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 7146b6fa15..9c0bb19fb9 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -29503,14 +29503,20 @@ int virDomainNetSetModelString(virDomainNetDefPtr net, const char *model) { - VIR_FREE(net->modelstr); - if ((net->model = virDomainNetModelTypeFromString(model)) >= 0) - return 0; + size_t i; + VIR_FREE(net->modelstr); net->model = VIR_DOMAIN_NET_MODEL_UNKNOWN; if (!model) return 0; + for (i = 0; i < ARRAY_CARDINALITY(virDomainNetModelTypeList); i++) { + if (STRCASEEQ(virDomainNetModelTypeList[i], model)) { + net->model = i; + return 0; + } + } + if (strspn(model, NET_MODEL_CHARS) < strlen(model)) { virReportError(VIR_ERR_INVALID_ARG, "%s", _("Model name contains invalid characters")); diff --git a/tests/qemuxml2argvdata/net-many-models.xml b/tests/qemuxml2argvdata/net-many-models.xml index 2b8f9b18eb..40fc5de06c 100644 --- a/tests/qemuxml2argvdata/net-many-models.xml +++ b/tests/qemuxml2argvdata/net-many-models.xml @@ -21,7 +21,8 @@ - + +