[webkit-dev] gdom_x_path_evaluator_create_ns_resolver [was: webkit #16401]
Luke Kenneth Casson Leighton
lkcl at lkcl.net
Mon Jun 8 02:29:44 PDT 2009
[taking this discussion onto webkit-dev for the benefit of other
people who may wish to use the glib / gobject bindings in the future]
On 6/6/09, Leon Winter <lwi at ring0.de> wrote:
> Hi,
>
> @Luke: how is XPath supposed to work?
>
> GdomXPathResult *res;
> GdomXPathEvaluator evaluator;
> char *exp = "//html:a";
> GdomDocument *doc = get_dom_document();
> GdomNodeList *els = gdom_document_get_elements_by_tag_name(doc,
> "body");
> GdomNode *body = gdom_node_list_item(els, 0);
> GdomXPathNSResolver *resolver =
> gdom_x_path_evaluator_create_ns_resolver(&evaluator, body);
>
> segfaults right at the last line. I found new creation methid for
> GdomXPathEvaluator, perhaps there should be one.
ok - thanks to mark rowe for highlighting the deliberate mistake:
https://bugs.webkit.org/show_bug.cgi?id=16401#c202
the first argument to any of the glib / gobject bindings needs to be
the object of the type which matches the IDL class from which the
function was auto-generated, so:
this function in Document.idl:
XPathNSResolver createNSResolver(in Node nodeResolver);
results in a function in GdomDocument.h:
WEBKIT_API GdomXPathNSResolver *
gdom_document_create_ns_resolver (GdomDocument *thiz, GdomNode *
node_resolver);
so as you can see, you have passed in an (uninitialised!) pointer to
"GdomXPathEvaluator evaluator", not a pointer to the GdomDocument
object - hence the segfault.
try this instead:
GdomXPathNSResolver *resolver =
gdom_x_path_evaluator_create_ns_resolver(doc, body);
l.
More information about the webkit-dev
mailing list