[Libvir] [PATCH] XPath accessors cleanup

Mark McLoughlin markmc at redhat.com
Fri Mar 30 10:01:25 UTC 2007


Hi Daniel,
	Nice stuff !

On Fri, 2007-03-30 at 05:38 -0400, Daniel Veillard wrote:

> +char *
> +virXPathString(const char *xpath, xmlXPathContextPtr ctxt) {
...
> +    ret = (char *) obj->stringval;
> +    obj->stringval = NULL;

> +int
> +virXPathNodeSet(const char *xpath, xmlXPathContextPtr ctxt, xmlNodePtr **list) {
...
> +    if (list != NULL) {
> +       *list = obj->nodesetval->nodeTab;
> +       obj->nodesetval->nodeTab = NULL;
> +    }

	This is all a little voodooish to me - e.g. you're assuming that
libxml2 allocated these with malloc() and you're also kind of breaking
the abstraction of xmlXPathObject by manipulating the structure like
this.

	i.e. you know this works, because you wrote libxml2, but you're not
using the abstraction very cleanly.

	I'd suggest either:

  - copy the memory from the xmlXPathObject and return that

  - make the functions return "libxml memory" and use xmlFree() in the 
    callers

Cheers,
Mark.




More information about the libvir-list mailing list