From b112b1abb4c9b9d4b234b46b1db05de9293a48ef Mon Sep 17 00:00:00 2001 From: GalaxyGorilla Date: Tue, 10 Mar 2020 09:30:20 +0000 Subject: [PATCH] lib: add possibility to search non-recursively for NB node entries Signed-off-by: GalaxyGorilla --- lib/northbound.c | 25 ++++++++++++++++++++++--- lib/northbound.h | 8 ++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/northbound.c b/lib/northbound.c index 48b8499bfc..11007e4309 100644 --- a/lib/northbound.c +++ b/lib/northbound.c @@ -2046,18 +2046,21 @@ void *nb_running_unset_entry(const struct lyd_node *dnode) return entry; } -void *nb_running_get_entry(const struct lyd_node *dnode, const char *xpath, - bool abort_if_not_found) +static void *nb_running_get_entry_worker(const struct lyd_node *dnode, + const char *xpath, + bool abort_if_not_found, + bool rec_search) { const struct lyd_node *orig_dnode = dnode; char xpath_buf[XPATH_MAXLEN]; + bool rec_flag = true; assert(dnode || xpath); if (!dnode) dnode = yang_dnode_get(running_config->dnode, xpath); - while (dnode) { + while (rec_flag && dnode) { struct nb_config_entry *config, s; yang_dnode_get_path(dnode, s.xpath, sizeof(s.xpath)); @@ -2065,6 +2068,8 @@ void *nb_running_get_entry(const struct lyd_node *dnode, const char *xpath, if (config) return config->entry; + rec_flag = rec_search; + dnode = dnode->parent; } @@ -2078,6 +2083,20 @@ void *nb_running_get_entry(const struct lyd_node *dnode, const char *xpath, abort(); } +void *nb_running_get_entry(const struct lyd_node *dnode, const char *xpath, + bool abort_if_not_found) +{ + return nb_running_get_entry_worker(dnode, xpath, abort_if_not_found, + true); +} + +void *nb_running_get_entry_non_rec(const struct lyd_node *dnode, + const char *xpath, bool abort_if_not_found) +{ + return nb_running_get_entry_worker(dnode, xpath, abort_if_not_found, + false); +} + /* Logging functions. */ const char *nb_event_name(enum nb_event event) { diff --git a/lib/northbound.h b/lib/northbound.h index bd57013f59..d5028ea7d2 100644 --- a/lib/northbound.h +++ b/lib/northbound.h @@ -1164,6 +1164,14 @@ extern void *nb_running_unset_entry(const struct lyd_node *dnode); extern void *nb_running_get_entry(const struct lyd_node *dnode, const char *xpath, bool abort_if_not_found); +/* + * Same as 'nb_running_get_entry', but doesn't search within parent nodes + * recursively if an user point is not found. + */ +extern void *nb_running_get_entry_non_rec(const struct lyd_node *dnode, + const char *xpath, + bool abort_if_not_found); + /* * Return a human-readable string representing a northbound event. * -- 2.39.5