On Tue, Nov 11, 2025 at 09:35:59 +0100, Michal Prívozník wrote: > 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
I'll add: (See https://gitlab.gnome.org/GNOME/libxml2/-/issues/989) on the next line. > > > > 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 How about avoiding the issue by not naming anything: Since the indentation is enabled by default in libxml2 and our most commonly used code which calls xmlDumpNode lives in a standalone process, where we don't override the setting, just removing the override will result in identical behaviour. For the use cases which do live in a process we don't fully control and thus the default could have been overriden, the result would be that the <metadata> element 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 >
