From: Peter Krempa Date: Mon, 1 Apr 2019 15:43:20 +0000 (+0200) Subject: vmx: Refactor number parsing in virVMXParseConfig X-Git-Tag: v5.3.0-rc1~257 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5857a63519310bd72a6b1cbc43b73e979cc6ca7b;p=thirdparty%2Flibvirt.git vmx: Refactor number parsing in virVMXParseConfig Parsing of the cpu affinity list was using virParseNumber. Modernize it to get rid of the virParseNumber call. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 429630faaf..ae9ee87be3 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -1500,19 +1500,35 @@ virVMXParseConfig(virVMXContext *ctx, } if (sched_cpu_affinity != NULL && STRCASENEQ(sched_cpu_affinity, "all")) { - const char *current = sched_cpu_affinity; - int number, count = 0; + VIR_AUTOSTRINGLIST afflist = NULL; + char **aff; + size_t naffs; def->cpumask = virBitmapNew(VIR_DOMAIN_CPUMASK_LEN); if (!def->cpumask) goto cleanup; - while (*current != '\0') { - virSkipSpaces(¤t); + if (!(afflist = virStringSplitCount(sched_cpu_affinity, ",", 0, &naffs))) + goto cleanup; + + if (naffs < numvcpus) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Expecting VMX entry 'sched.cpu.affinity' to contain " + "at least as many values as 'numvcpus' (%lld) but " + "found only %zu value(s)"), numvcpus, naffs); + goto cleanup; + } - number = virParseNumber(¤t); + for (aff = afflist; *aff; aff++) { + const char *current = *aff; + unsigned int number; + int rc; - if (number < 0) { + virSkipSpaces(¤t); + rc = virStrToLong_uip(current, (char **) ¤t, 10, &number); + virSkipSpaces(¤t); + + if (rc < 0 || *current != '\0') { virReportError(VIR_ERR_INTERNAL_ERROR, _("Expecting VMX entry 'sched.cpu.affinity' to be " "a comma separated list of unsigned integers but " @@ -1528,31 +1544,6 @@ virVMXParseConfig(virVMXContext *ctx, } ignore_value(virBitmapSetBit(def->cpumask, number)); - ++count; - - virSkipSpaces(¤t); - - if (*current == ',') { - ++current; - } else if (*current == '\0') { - break; - } else { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Expecting VMX entry 'sched.cpu.affinity' to be " - "a comma separated list of unsigned integers but " - "found '%s'"), sched_cpu_affinity); - goto cleanup; - } - - virSkipSpaces(¤t); - } - - if (count < numvcpus) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Expecting VMX entry 'sched.cpu.affinity' to contain " - "at least as many values as 'numvcpus' (%lld) but " - "found only %d value(s)"), numvcpus, count); - goto cleanup; } }