From b0e04780af047cffb68f078bf2edd7572fd91b9b Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sun, 25 Mar 2012 08:55:27 +0000 Subject: node_is_empty svn path=/trunk/netsurf/; revision=13655 --- css/select.c | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) (limited to 'css/select.c') diff --git a/css/select.c b/css/select.c index aaebc906d..6f1b5a658 100644 --- a/css/select.c +++ b/css/select.c @@ -1544,19 +1544,40 @@ css_error node_count_siblings(void *pw, void *node, bool same_name, */ css_error node_is_empty(void *pw, void *node, bool *match) { -#ifdef FIXME - xmlNode *n = node; - + dom_node *n = node, *next; + dom_exception err; + *match = true; - - for (n = n->children; n != NULL; n = n->next) { - if (n->type == XML_ELEMENT_NODE || - n->type == XML_TEXT_NODE) { + + err = dom_node_get_first_child(n, &n); + if (err != DOM_NO_ERR) { + return CSS_BADPARM; + } + + while (n != NULL) { + dom_node_type ntype; + err = dom_node_get_node_type(n, &ntype); + if (err != DOM_NO_ERR) { + dom_node_unref(n); + return CSS_BADPARM; + } + + if (ntype == DOM_ELEMENT_NODE || + ntype == DOM_TEXT_NODE) { *match = false; + dom_node_unref(n); break; } + + err = dom_node_get_next_sibling(n, &next); + if (err != DOM_NO_ERR) { + dom_node_unref(n); + return CSS_BADPARM; + } + dom_node_unref(n); + n = next; } -#endif + return CSS_OK; } -- cgit v1.2.3