summaryrefslogtreecommitdiff
path: root/css
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@netsurf-browser.org>2012-03-25 08:55:27 +0000
committerDaniel Silverstone <dsilvers@netsurf-browser.org>2012-03-25 08:55:27 +0000
commitb0e04780af047cffb68f078bf2edd7572fd91b9b (patch)
tree35934bd3737fc6bdef5c331d37a74c8d86ce6867 /css
parent2b215a8df111ef2d1a16a3205188ffefdb558811 (diff)
downloadnetsurf-b0e04780af047cffb68f078bf2edd7572fd91b9b.tar.gz
netsurf-b0e04780af047cffb68f078bf2edd7572fd91b9b.tar.bz2
node_is_empty
svn path=/trunk/netsurf/; revision=13655
Diffstat (limited to 'css')
-rw-r--r--css/select.c37
1 files changed, 29 insertions, 8 deletions
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;
}