Rather than rely on strtok_r calls, use virStringSplitCount in order
to process the conf variable. Coverity complains because it doesn't
know that the returned temp variable in openvzReadVPSConfigParam
should be non-NULL.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/openvz/openvz_conf.c | 33 ++++++++++++++++++++-------------
1 file changed, 20 insertions(+), 13 deletions(-)
diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
index 99ce95c..6562fcc 100644
--- a/src/openvz/openvz_conf.c
+++ b/src/openvz/openvz_conf.c
@@ -200,7 +200,9 @@ openvzReadNetworkConf(virDomainDefPtr def,
int ret;
virDomainNetDefPtr net = NULL;
char *temp = NULL;
- char *token, *saveptr = NULL;
+ char **tmp = NULL;
+ size_t ntmp = 0;
+ size_t i;
/*parse routing network configuration*
* Sample from config:
@@ -214,20 +216,23 @@ openvzReadNetworkConf(virDomainDefPtr def,
veid);
goto error;
} else if (ret > 0) {
- token = strtok_r(temp, " ", &saveptr);
- while (token != NULL) {
+ if (!(tmp = virStringSplitCount(temp, " ", 0, &ntmp)))
+ goto error;
+
+ for (i = 0; i < ntmp; i++) {
if (VIR_ALLOC(net) < 0)
goto error;
net->type = VIR_DOMAIN_NET_TYPE_ETHERNET;
- if (virDomainNetAppendIPAddress(net, token, AF_UNSPEC, 0) < 0)
+ if (virDomainNetAppendIPAddress(net, tmp[i], AF_UNSPEC, 0) < 0)
goto error;
if (VIR_APPEND_ELEMENT_COPY(def->nets, def->nnets, net) < 0)
goto error;
-
- token = strtok_r(NULL, " ", &saveptr);
}
+ virStringFreeListCount(tmp, ntmp);
+ ntmp = 0;
+ tmp = NULL;
}
/*parse bridge devices*/
@@ -242,15 +247,17 @@ openvzReadNetworkConf(virDomainDefPtr def,
veid);
goto error;
} else if (ret > 0) {
- token = strtok_r(temp, ";", &saveptr);
- while (token != NULL) {
- /*add new device to list*/
+ if (!(tmp = virStringSplitCount(temp, " ", 0, &ntmp)))
+ goto error;
+
+ for (i = 0; i < ntmp; i++) {
+ /* add new device to list */
if (VIR_ALLOC(net) < 0)
goto error;
net->type = VIR_DOMAIN_NET_TYPE_BRIDGE;
- char *p = token;
+ char *p = tmp[i];
char cpy_temp[32];
int len;
@@ -313,21 +320,21 @@ openvzReadNetworkConf(virDomainDefPtr def,
}
}
p = ++next;
- } while (p < token + strlen(token));
+ } while (p < tmp[i] + strlen(tmp[i]));
if (VIR_APPEND_ELEMENT_COPY(def->nets, def->nnets, net) < 0)
goto error;
-
- token = strtok_r(NULL, ";", &saveptr);
}
}
VIR_FREE(temp);
+ virStringFreeListCount(tmp, ntmp);
return 0;
error:
VIR_FREE(temp);
+ virStringFreeListCount(tmp, ntmp);
virDomainNetDefFree(net);
return -1;
}
--
2.5.5