From 9c60417f73868e2cd8e0db951020110ee8c295fc Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Mon, 31 Mar 2014 22:08:54 +0100 Subject: Simplify DOM node walker. --- utils/libdom.c | 56 ++++++++++++++++++++------------------------------------ 1 file changed, 20 insertions(+), 36 deletions(-) (limited to 'utils/libdom.c') diff --git a/utils/libdom.c b/utils/libdom.c index a1465af19..245c9b229 100644 --- a/utils/libdom.c +++ b/utils/libdom.c @@ -50,58 +50,42 @@ bool libdom_treewalk(dom_node *root, break; } - if (next != NULL) { /* 1. children */ + if (next != NULL) { + /* 1. Got children */ dom_node_unref(node); node = next; } else { - exc = dom_node_get_next_sibling(node, &next); - if (exc != DOM_NO_ERR) { - dom_node_unref(node); - break; - } - - if (next != NULL) { /* 2. siblings */ - dom_node_unref(node); - node = next; - } else { /* 3. ancestor siblings */ - while (node != NULL) { - exc = dom_node_get_next_sibling(node, - &next); - if (exc != DOM_NO_ERR) { - dom_node_unref(node); - node = NULL; - break; - } - - if (next != NULL) { - dom_node_unref(next); - break; - } - - exc = dom_node_get_parent_node(node, - &next); - if (exc != DOM_NO_ERR) { - dom_node_unref(node); - node = NULL; - break; - } - + /* No children; siblings & ancestor's siblings */ + while (node != NULL) { + exc = dom_node_get_next_sibling(node, &next); + if (exc != DOM_NO_ERR) { dom_node_unref(node); - node = next; + node = NULL; + break; } - if (node == NULL) + if (next != NULL) { + /* 2. Got sibling */ break; + } - exc = dom_node_get_next_sibling(node, &next); + exc = dom_node_get_parent_node(node, &next); if (exc != DOM_NO_ERR) { dom_node_unref(node); + node = NULL; break; } + /* 3. Try parent */ dom_node_unref(node); node = next; } + + if (node == NULL) + break; + + dom_node_unref(node); + node = next; } assert(node != NULL); -- cgit v1.2.3