[libvirt PATCH v5 0/8] Refactor XML parsing boilerplate code
Tim Wiederhake
twiederh at redhat.com
Thu Apr 15 08:26:56 UTC 2021
polite ping
On Thu, 2021-04-08 at 13:19 +0200, Tim Wiederhake wrote:
> This series lays the groundwork for replacing some recurring
> boilerplate code
> in src/conf/ regarding the extraction of XML attribute values.
>
> For an on / off attribute, the boilerplate code looks roughly like
> this,
>
> g_autofree char *str = NULL;
> if (str = virXMLPropString(node, "x")) {
> int val;
> if ((val = virTristateBoolTypeFromString(str)) <= 0) {
> virReportError(...)
> return -1;
> }
> def->x = val;
> }
>
> with some variations regarding how `str` is free'd in case of later
> re-use,
> the exact error message for invalid values, whether or not
> `VIR_TRISTATE_(SWITCH|BOOL)_ABSENT` is explicitly checked for (`val <
> 0` vs.
> `val <= 0`), whether an intermediate variable is used or the value is
> assigned
> directly, and in some cases the conditions in the two if-blocks are
> merged.
>
> After the refactoring, the above code block looks like this:
>
> if (virXMLPropTristateBool(node, "x", VIR_XML_PROP_OPTIONAL, &def-
> >x) < 0)
> return -1;
>
> Similar functions are introduced for integer valued attributes,
> unsigned
> integer valued attributes and enum valued attributes.
>
> Patches #6, #7, and #8 demonstrate the application of these function
> and stand
> representative of more patches that I did not sent along yet as to
> not drown
> the mailing list in spam. These patches remove a total of ~ 1000
> lines of code
> and fix some places, where e.g. `<foo bar="default"/>` would
> incorrectly be
> accepted as virXMLTristateBool.
>
> As an added benefit, this refactoring makes the error messages for
> invalid
> values in these XML attributes much more consistent:
>
> $ git diff master | grep "^-.*_(\"" | wc -l
> 239
> $ git diff master | grep "^+.*_(\"" | wc -l
> 21
>
> V1:
> https://listman.redhat.com/archives/libvir-list/2021-March/msg00853.html
> V2:
> https://listman.redhat.com/archives/libvir-list/2021-March/msg00994.html
> V3:
> https://listman.redhat.com/archives/libvir-list/2021-March/msg01066.html
> V4:
> https://listman.redhat.com/archives/libvir-list/2021-April/msg00209.html
>
> Changes since V4:
> * Added custom error message for virXMLProp(Int|UInt) when the
> attribute value
> is 0 and VIR_XML_PROP_NONZERO is specified.
>
> Cheers,
> Tim
>
> Tim Wiederhake (8):
> virxml: Add virXMLPropTristateBool
> virxml: Add virXMLPropTristateSwitch
> virxml: Add virXMLPropInt
> virxml: Add virXMLPropUInt
> virxml: Add virXMLPropEnum
> virNetworkForwardNatDefParseXML: Use virXMLProp*
> virDomainIOThreadIDDefParseXML: Use virXMLProp*
> virCPUDefParseXML: Use virXMLProp*
>
> src/conf/cpu_conf.c | 14 +-
> src/conf/domain_conf.c | 14 +-
> src/conf/network_conf.c | 16 +--
> src/libvirt_private.syms | 5 +
> src/util/virxml.c | 267
> +++++++++++++++++++++++++++++++++++++++
> src/util/virxml.h | 31 +++++
> 6 files changed, 312 insertions(+), 35 deletions(-)
>
> --
> 2.26.2
>
>
More information about the libvir-list
mailing list