On Tue, Jul 12, 2011 at 13:57:09 +0200, Michal Privoznik wrote: > These functions take on input decimal numbers optionally followed > by unit. Units are exactly the same as 'tc' accepts. > --- > src/conf/domain_conf.c | 3 + > src/conf/domain_conf.h | 1 + > src/conf/network_conf.c | 5 + > src/conf/network_conf.h | 1 + > src/libvirt_private.syms | 1 + > src/util/network.c | 203 ++++++++++++++++++++++++++++++++++++++++++++++ > src/util/network.h | 2 + > 7 files changed, 216 insertions(+), 0 deletions(-) This can be greatly simplified once we forbid using units in bandwidth attributes. ... > diff --git a/src/util/network.c b/src/util/network.c > index eb16e0c..476ecde 100644 > --- a/src/util/network.c > +++ b/src/util/network.c > @@ -10,6 +10,7 @@ > > #include <config.h> > #include <arpa/inet.h> > +#include <math.h> BTW, why did you need to include math.h? Getting rid of it is another good reason for removing units. > > #include "memory.h" > #include "network.h" > @@ -21,6 +22,9 @@ ... > +/** > + * virBandwidthParseXML: The name here doesn't match the function this is supposed to document. > + * @node: XML node > + * @def: where to store the parsed result > + * > + * Parse bandwidth XML and store into given pointer > + * > + * Returns 0 on success, -1 on error. > + */ > +int > +virBandwidthDefParseNode(xmlNodePtr node, virBandwidthPtr def) > +{ > + int ret = -1; > + xmlNodePtr cur = node->children; > + xmlNodePtr in = NULL, out = NULL; > + > + if (!node || !def || > + !xmlStrEqual(node->name, BAD_CAST "bandwidth")) > + return -1; > + > + memset(def, 0, sizeof(virBandwidth)); Using sizeof(*def) is better. > + while (cur) { > + if (cur->type == XML_ELEMENT_NODE) { > + if (xmlStrEqual(cur->name, BAD_CAST "inbound")) { > + if (in) { > + virBandwidthError(VIR_ERR_XML_DETAIL, "%s", > + _("Only one child <inbound> " > + "element allowed")); > + goto cleanup; > + } > + in = cur; > + } else if (xmlStrEqual(cur->name, BAD_CAST "outbound")) { > + if (out) { > + virBandwidthError(VIR_ERR_XML_DETAIL, "%s", > + _("Only one child <outbound> " > + "element allowed")); > + goto cleanup; > + } > + out = cur; > + } else { > + virBandwidthError(VIR_ERR_CONFIG_UNSUPPORTED, > + _("Unknown element %s"), > + cur->name); > + goto cleanup; AFAIK we ignore unknown XML elements in other XML parsing code, shouldn't we do the same here? ... Jirka -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list