From 5857a63519310bd72a6b1cbc43b73e979cc6ca7b Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 1 Apr 2019 17:43:20 +0200 Subject: [PATCH] vmx: Refactor number parsing in virVMXParseConfig MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/vmx/vmx.c | 53 +++++++++++++++++++++------------------------------ 1 file changed, 22 insertions(+), 31 deletions(-) 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; } } -- 2.47.2