From: Daniel Lenski Date: Mon, 8 Feb 2021 01:47:08 +0000 (-0800) Subject: split htmlnode_next and htmlnode_dive X-Git-Tag: v8.20~328^2~5 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=3965188838e8d403dfe7d708c088696e62f79032;p=users%2Fdwmw2%2Fopenconnect.git split htmlnode_next and htmlnode_dive htmlnode_next(): try ->next, before ->parent htmlnode_dive(): try children, before ->next, before ->parent Signed-off-by: Daniel Lenski --- diff --git a/auth-html.c b/auth-html.c index 148ff3c5..c7999d88 100644 --- a/auth-html.c +++ b/auth-html.c @@ -26,9 +26,6 @@ xmlNodePtr htmlnode_next(xmlNodePtr top, xmlNodePtr node) { - if (node->children) - return node->children; - while (!node->next) { node = node->parent; if (!node || node == top) @@ -37,11 +34,19 @@ xmlNodePtr htmlnode_next(xmlNodePtr top, xmlNodePtr node) return node->next; } +xmlNodePtr htmlnode_dive(xmlNodePtr top, xmlNodePtr node) +{ + if (node->children) + return node->children; + return htmlnode_next(top, node); +} + + xmlNodePtr find_form_node(xmlDocPtr doc) { xmlNodePtr root, node; - for (root = node = xmlDocGetRootElement(doc); node; node = htmlnode_next(root, node)) { + for (root = node = xmlDocGetRootElement(doc); node; node = htmlnode_dive(root, node)) { if (node->name && !strcasecmp((char *)node->name, "form")) return node; } @@ -210,7 +215,7 @@ struct oc_auth_form *parse_form_node(struct openconnect_info *vpninfo, xmlnode_get_prop(node, "name", &form->auth_id); form->banner = strdup(form->auth_id); - for (child = htmlnode_next(node, node); child && child != node; child = htmlnode_next(node, child)) { + for (child = htmlnode_dive(node, node); child && child != node; child = htmlnode_dive(node, child)) { if (!child->name) continue; diff --git a/auth-juniper.c b/auth-juniper.c index 64d2d82e..4c6f4ad0 100644 --- a/auth-juniper.c +++ b/auth-juniper.c @@ -414,8 +414,8 @@ static struct oc_auth_form *parse_roles_form_node(xmlNodePtr node) xmlNodePtr child; // Set form->action here as a redirect url with keys and ids. - for (child = htmlnode_next(node, node); child && child != node; - child = htmlnode_next(node, child)) { + for (child = htmlnode_dive(node, node); child && child != node; + child = htmlnode_dive(node, child)) { if (child->name && !strcasecmp((char *)child->name, "table")) { char *table_id = (char *)xmlGetProp(child, (unsigned char *)"id"); diff --git a/openconnect-internal.h b/openconnect-internal.h index 033190b3..5d19e263 100644 --- a/openconnect-internal.h +++ b/openconnect-internal.h @@ -922,6 +922,7 @@ int compress_packet(struct openconnect_info *vpninfo, int compr_type, struct pkt /* html-auth.c */ xmlNodePtr htmlnode_next(xmlNodePtr top, xmlNodePtr node); +xmlNodePtr htmlnode_dive(xmlNodePtr top, xmlNodePtr node); xmlNodePtr find_form_node(xmlDocPtr doc); int parse_input_node(struct openconnect_info *vpninfo, struct oc_auth_form *form, xmlNodePtr node, const char *submit_button,