On Tue, Aug 26, 2014 at 09:34:42AM +0300, Shahar Havivi wrote: > Hi, > > I am trying to add xmlXPathRegisterNs() to v2v/xml-c.c but I get a seg fault, > the signature should be: > http://xmlsoft.org/html/libxml-xpathInternals.html#xmlXPathRegisterNs > > I think I am wrong in CAMLparam and CAMLlocal..., > Following is the patch: > > =================================================================================== > diff --git a/v2v/xml-c.c b/v2v/xml-c.c > index 4c9bc77..a917c24 100644 > --- a/v2v/xml-c.c > +++ b/v2v/xml-c.c > @@ -141,6 +141,16 @@ v2v_xml_xpath_new_context (value docv) > } > > value > +v2v_xml_xpath_register_ns (value prefix, value uri, value xpathctx) > +{ > + CAMLparam3 (prefix, uri, xpathctx); > + CAMLlocal1 (retval); > + retval = xmlXPathRegisterNs (BAD_CAST String_val (prefix), BAD_CAST > String_val (uri), xpathctx); > + > + CAMLreturn (retval);
An 'int' isn't a 'value', so this will not work and likely segfault. For the representation of 'value' see: http://rwmj.wordpress.com/2009/08/04/ocaml-internals/#content (and follow up articles). In any case, here you need to turn the return value into an exception, ie something like this untested code: value v2v_xml_xpath_register_ns (value prefix, value uri, value xpathctx) { CAMLparam3 (prefix, uri, xpathctx); int r; r = xmlXPathRegisterNs (...); if (r == -1) caml_invalid_argument ("some suitable error message here ..."); /* return unit */ CAMLreturn (Val_unit); } > +external xpath_register_ns : string -> string -> xpathctx -> int = > "v2v_xml_xpath_register_ns" Needs to return unit, not int. If the libxml2 function returns -1 then this will throw an exception (Invalid_arg). > +val xpath_register_ns : string -> string -> xpathctx -> int > +(** xmlXPathRegisterNs *) Same here. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-df lists disk usage of guests without needing to install any software inside the virtual machine. Supports Linux and Windows. http://people.redhat.com/~rjones/virt-df/ _______________________________________________ Libguestfs mailing list [email protected] https://www.redhat.com/mailman/listinfo/libguestfs
