summaryrefslogtreecommitdiffstats
path: root/lib/yang.c
diff options
context:
space:
mode:
authorIgor Ryzhov <iryzhov@nfware.com>2024-01-13 21:09:18 +0100
committerIgor Ryzhov <iryzhov@nfware.com>2024-01-14 18:08:15 +0100
commit2b7d9532c8ab3590088aca0f22147224fce1df85 (patch)
tree05a75208462a4fc4e518d198600c990f38a27388 /lib/yang.c
parentMerge pull request #15151 from idryzhov/mgmtd-vrf (diff)
downloadfrr-2b7d9532c8ab3590088aca0f22147224fce1df85.tar.xz
frr-2b7d9532c8ab3590088aca0f22147224fce1df85.zip
lib: fix yang_lyd_trim_xpath
We should traverse all top-level siblings, not only the first one. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
Diffstat (limited to 'lib/yang.c')
-rw-r--r--lib/yang.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/lib/yang.c b/lib/yang.c
index 5b177f7fb..7d35fb0d3 100644
--- a/lib/yang.c
+++ b/lib/yang.c
@@ -1089,7 +1089,7 @@ LY_ERR yang_lyd_trim_xpath(struct lyd_node **root, const char *xpath)
}
return LY_SUCCESS;
#else
- struct lyd_node *node;
+ struct lyd_node *node, *sib;
struct lyd_node **remove = NULL;
struct ly_set *set = NULL;
uint32_t i;
@@ -1123,18 +1123,21 @@ LY_ERR yang_lyd_trim_xpath(struct lyd_node **root, const char *xpath)
}
darr_ensure_cap(remove, 128);
- LYD_TREE_DFS_BEGIN (*root, node) {
- /*
- * If this is a direct matching node then include it's subtree
- * which won't be marked and would otherwise be removed.
- */
- if (node->priv == (void *)2)
- LYD_TREE_DFS_continue = 1;
- else if (!node->priv) {
- *darr_append(remove) = node;
- LYD_TREE_DFS_continue = 1;
+ LY_LIST_FOR(*root, sib) {
+ LYD_TREE_DFS_BEGIN (sib, node) {
+ /*
+ * If this is a direct matching node then include its
+ * subtree which won't be marked and would otherwise
+ * be removed.
+ */
+ if (node->priv == (void *)2)
+ LYD_TREE_DFS_continue = 1;
+ else if (!node->priv) {
+ *darr_append(remove) = node;
+ LYD_TREE_DFS_continue = 1;
+ }
+ LYD_TREE_DFS_END(sib, node);
}
- LYD_TREE_DFS_END(*root, node);
}
darr_foreach_i (remove, i) {
if (remove[i] == *root)