On Tue, Oct 16, 2007 at 02:13:04PM +0100, Richard W.M. Jones wrote:
This patch is a little bit esoteric, but I need it for something
I'm
working on at the moment.
At the moment the code in xend_internal.c: xend_parse_sexp_desc parses
the domain sexpr directly into XML. This makes it rather hard to just
get a list of block devices without repeating the same code. So here
I've factored out the common code for parsing block devices into a
separate function and callback.
You really need a callback ? This makes code harder to understand
+ /* Call the callback function. */
+ ret = fn (conn, data, isBlock, cdrom, isNoSrcCdrom,
+ drvName, drvType, src, dst, mode);
This adds flexibility but is a bit convoluted, what do you need this for ?
There are a couple of small changes that you should be aware of: (1)
The
<devices> list may be returned in a different order (specifically, block
devices are always returned first). (2) We iterate over the root nodes
of the sexpr twice (once for block devices, once for vifs and vfbs).
But the sexpr is small and in-memory so this shouldn't be a problem
compared to having to do the HTTP request to xend to get it in the first
place.
Having disks presented first in the resulting XML is a bit cleaner IMHO
and I don't think the double scan of teh sexpr is a big deal, really.
I'm more wondering about what you need to achieve that really needs a callback
based interface.
Daniel
--
Red Hat Virtualization group
http://redhat.com/virtualization/
Daniel Veillard | virtualization library
http://libvirt.org/
veillard(a)redhat.com | libxml GNOME XML XSLT toolkit
http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine
http://rpmfind.net/