From fcab6118f227e57b71fe0580c550e1a40ef218d4 Mon Sep 17 00:00:00 2001 From: Stefan Ritt Date: Thu, 24 Mar 2005 23:18:01 +0000 Subject: [PATCH] Compare root node correctly in mxml_find_nodes SVN revision: 1281 --- src/mxml.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/mxml.c b/src/mxml.c index d0356deb..5e184776 100755 --- a/src/mxml.c +++ b/src/mxml.c @@ -627,7 +627,7 @@ int mxml_add_resultnode(PMXML_NODE node, char *xml_path, PMXML_NODE **nodelist, (*found)++; } else { /* if not at end of path, branch into subtree */ - return mxml_find_nodes1(node, xml_path, nodelist, found); + return mxml_find_nodes1(node, xml_path+1, nodelist, found); } return 1; @@ -655,10 +655,29 @@ int mxml_find_nodes1(PMXML_NODE tree, char *xml_path, PMXML_NODE **nodelist, int p1 = xml_path; pnode = tree; - /* skip leading '/' */ - if (*p1 && *p1 == '/') + if (*p1 && *p1 == '/') { + + /* if path starts with '/', compare root node */ p1++; + p2 = p1; + while (*p2 && *p2 != '/') + p2++; + len = (size_t)p2 - (size_t)p1; + if (len >= sizeof(node_name)) + return 0; + + memcpy(node_name, p1, len); + node_name[len] = 0; + + if (strcmp(pnode->name, node_name) != 0) + return 0; + + p1 = p2; + if (*p1 == '/') + p1++; + } + do { p2 = p1; while (*p2 && *p2 != '/' && *p2 != '[')