mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 19:41:16 +00:00
util: introduce virXMLFormatElement helper
This helper allows you to better structurize the code if some element may or may not contains attributes and/or child elements. Reviewed-by: John Ferlan <jferlan@redhat.com> Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
ef3ea17f62
commit
4e56a3e793
@ -2956,6 +2956,7 @@ virVHBAPathExists;
|
||||
virXMLCheckIllegalChars;
|
||||
virXMLChildElementCount;
|
||||
virXMLExtractNamespaceXML;
|
||||
virXMLFormatElement;
|
||||
virXMLNodeContentString;
|
||||
virXMLNodeNameEqual;
|
||||
virXMLNodeSanitizeNamespaces;
|
||||
|
@ -1354,3 +1354,50 @@ virXMLValidatorFree(virXMLValidatorPtr validator)
|
||||
xmlRelaxNGFree(validator->rng);
|
||||
VIR_FREE(validator);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virXMLFormatElement
|
||||
* @buf: the parent buffer where the element will be placed
|
||||
* @name: the name of the element
|
||||
* @attrBuf: buffer with attributes for element, may be NULL
|
||||
* @childBuf: buffer with child elements, may be NULL
|
||||
*
|
||||
* Helper to format element where attributes or child elements
|
||||
* are optional and may not be formatted. If both @attrBuf and
|
||||
* @childBuf are NULL or are empty buffers the element is not
|
||||
* formatted.
|
||||
*
|
||||
* Returns 0 on success, -1 on error.
|
||||
*/
|
||||
int
|
||||
virXMLFormatElement(virBufferPtr buf,
|
||||
const char *name,
|
||||
virBufferPtr attrBuf,
|
||||
virBufferPtr childBuf)
|
||||
{
|
||||
if ((!attrBuf || virBufferUse(attrBuf) == 0) &&
|
||||
(!childBuf || virBufferUse(childBuf) == 0)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((attrBuf && virBufferCheckError(attrBuf) < 0) ||
|
||||
(childBuf && virBufferCheckError(childBuf) < 0)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
virBufferAsprintf(buf, "<%s", name);
|
||||
|
||||
if (attrBuf && virBufferUse(attrBuf) > 0)
|
||||
virBufferAddBuffer(buf, attrBuf);
|
||||
|
||||
if (childBuf && virBufferUse(childBuf) > 0) {
|
||||
virBufferAddLit(buf, ">\n");
|
||||
virBufferAddBuffer(buf, childBuf);
|
||||
virBufferAsprintf(buf, "</%s>\n", name);
|
||||
} else {
|
||||
virBufferAddLit(buf, "/>\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -215,4 +215,10 @@ virXMLValidateAgainstSchema(const char *schemafile,
|
||||
void
|
||||
virXMLValidatorFree(virXMLValidatorPtr validator);
|
||||
|
||||
int
|
||||
virXMLFormatElement(virBufferPtr buf,
|
||||
const char *name,
|
||||
virBufferPtr attrBuf,
|
||||
virBufferPtr childBuf);
|
||||
|
||||
#endif /* __VIR_XML_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user