summaryrefslogtreecommitdiff
path: root/lib/northbound_cli.c
diff options
context:
space:
mode:
authorMark Stapp <mjs@voltanet.io>2021-09-17 08:29:00 -0400
committerGitHub <noreply@github.com>2021-09-17 08:29:00 -0400
commit1430121d57b148f165bf8cc5ba96d977f7149b6b (patch)
tree2edcf5ba6910a4ebac557dfecdeb6b7b73f69a5d /lib/northbound_cli.c
parent7f906926c77f59d07f45967908f62482a6d2c571 (diff)
parent0de76236b16747f76f705fad82a213dca1675236 (diff)
Merge pull request #9629 from idryzhov/nb-cli-sort
lib: significantly improve nb cli command sorting
Diffstat (limited to 'lib/northbound_cli.c')
-rw-r--r--lib/northbound_cli.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/northbound_cli.c b/lib/northbound_cli.c
index b74a0e6c23..6676c0b072 100644
--- a/lib/northbound_cli.c
+++ b/lib/northbound_cli.c
@@ -550,6 +550,13 @@ void nb_cli_show_config_prepare(struct nb_config *config, bool with_defaults)
LYD_VALIDATE_NO_STATE, NULL);
}
+static int lyd_node_cmp(struct lyd_node **dnode1, struct lyd_node **dnode2)
+{
+ struct nb_node *nb_node = (*dnode1)->schema->priv;
+
+ return nb_node->cbs.cli_cmp(*dnode1, *dnode2);
+}
+
static void show_dnode_children_cmds(struct vty *vty, struct lyd_node *root,
bool with_defaults)
{
@@ -567,6 +574,10 @@ static void show_dnode_children_cmds(struct vty *vty, struct lyd_node *root,
* it's time to print the config.
*/
if (sort_node && nb_node != sort_node) {
+ list_sort(sort_list,
+ (int (*)(const void **,
+ const void **))lyd_node_cmp);
+
for (ALL_LIST_ELEMENTS_RO(sort_list, listnode, data))
nb_cli_show_dnode_cmds(vty, data,
with_defaults);
@@ -584,11 +595,9 @@ static void show_dnode_children_cmds(struct vty *vty, struct lyd_node *root,
if (!sort_node) {
sort_node = nb_node;
sort_list = list_new();
- sort_list->cmp = (int (*)(void *, void *))
- nb_node->cbs.cli_cmp;
}
- listnode_add_sort(sort_list, child);
+ listnode_add(sort_list, child);
continue;
}
@@ -596,6 +605,9 @@ static void show_dnode_children_cmds(struct vty *vty, struct lyd_node *root,
}
if (sort_node) {
+ list_sort(sort_list,
+ (int (*)(const void **, const void **))lyd_node_cmp);
+
for (ALL_LIST_ELEMENTS_RO(sort_list, listnode, data))
nb_cli_show_dnode_cmds(vty, data, with_defaults);