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;
|
virXMLCheckIllegalChars;
|
||||||
virXMLChildElementCount;
|
virXMLChildElementCount;
|
||||||
virXMLExtractNamespaceXML;
|
virXMLExtractNamespaceXML;
|
||||||
|
virXMLFormatElement;
|
||||||
virXMLNodeContentString;
|
virXMLNodeContentString;
|
||||||
virXMLNodeNameEqual;
|
virXMLNodeNameEqual;
|
||||||
virXMLNodeSanitizeNamespaces;
|
virXMLNodeSanitizeNamespaces;
|
||||||
|
@ -1354,3 +1354,50 @@ virXMLValidatorFree(virXMLValidatorPtr validator)
|
|||||||
xmlRelaxNGFree(validator->rng);
|
xmlRelaxNGFree(validator->rng);
|
||||||
VIR_FREE(validator);
|
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
|
void
|
||||||
virXMLValidatorFree(virXMLValidatorPtr validator);
|
virXMLValidatorFree(virXMLValidatorPtr validator);
|
||||||
|
|
||||||
|
int
|
||||||
|
virXMLFormatElement(virBufferPtr buf,
|
||||||
|
const char *name,
|
||||||
|
virBufferPtr attrBuf,
|
||||||
|
virBufferPtr childBuf);
|
||||||
|
|
||||||
#endif /* __VIR_XML_H__ */
|
#endif /* __VIR_XML_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user