On 11/10/25 17:20, Peter Krempa via Devel wrote: > From: Peter Krempa <[email protected]> > > 'libxml2' deprecated the 'xmlIndentTreeOutput' thread-local variable as > well as the 'xmlThrDefIndentTreeOutput' function for setting the global > default, which we use in our code for formatting the metadata sub-XML. > > 'libxml2' also for now doesn't provide a way to set target indentation > level in 'xmlSaveCtxt' which would allow us to use the modern output > APIs, we can't replace our use of 'xmlDumpNode'.
Here, I'd like a reference to: https://gitlab.gnome.org/GNOME/libxml2/-/issues/989 > > Since the indentation is enabled by default in libxml2 and most of our > code using xmlDumpNode (notably except for the 'test' driver and > embedded qemu driver uses) is in standalone processes, which didn't > change the default, just removing the override will result in identical > behaviour. I think there are more drivers like that: ESX, VMWare, hyperv and maybe others. > > For the two exeptions, the result of changing the default would be that exceptions > the <metadata> part would be un-indented, but that is still valid XML. Agreed. Once the aforementioned issue is fixed this can be switched to xmlSaveTree(). > > Thus to fix the deprecated use just stop setting 'xmlIndentTreeOutput'. > > Closes: https://gitlab.com/libvirt/libvirt/-/issues/816 > Signed-off-by: Peter Krempa <[email protected]> > --- > src/util/virxml.c | 10 ---------- > 1 file changed, 10 deletions(-) > > diff --git a/src/util/virxml.c b/src/util/virxml.c > index 44f11accf3..77c7b5a8f4 100644 > --- a/src/util/virxml.c > +++ b/src/util/virxml.c > @@ -1920,23 +1920,14 @@ virXMLFormatMetadata(virBuffer *buf, > { > g_autoptr(xmlBuffer) xmlbuf = NULL; > const char *xmlbufContent = NULL; > - int oldIndentTreeOutput = xmlIndentTreeOutput; > > if (!metadata) > return 0; > > - /* Indentation on output requires that we previously set > - * xmlKeepBlanksDefault to 0 when parsing; also, libxml does 2 > - * spaces per level of indentation of intermediate elements, > - * but no leading indentation before the starting element. > - * Thankfully, libxml maps what looks like globals into > - * thread-local uses, so we are thread-safe. */ > - xmlIndentTreeOutput = 1; > xmlbuf = virXMLBufferCreate(); > > if (xmlNodeDump(xmlbuf, metadata->doc, metadata, > virBufferGetIndent(buf) / 2, 1) < 0) { > - xmlIndentTreeOutput = oldIndentTreeOutput; > virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > _("Unable to format metadata element")); > return -1; > @@ -1948,7 +1939,6 @@ virXMLFormatMetadata(virBuffer *buf, > virSkipSpaces(&xmlbufContent); > > virBufferAsprintf(buf, "%s\n", xmlbufContent); > - xmlIndentTreeOutput = oldIndentTreeOutput; > > return 0; > } Michal
