diff options
| author | Christian Hopps <chopps@labn.net> | 2023-12-26 07:50:42 -0500 |
|---|---|---|
| committer | Christian Hopps <chopps@labn.net> | 2023-12-28 17:52:57 +0000 |
| commit | 356c01b121fc4b9355af0910399c267f01eea55f (patch) | |
| tree | f190bd737c2dfa5552472f7fd8bc8a4d3bd5b787 /lib/yang.c | |
| parent | 60a8cf71f7f0455c7d600c4577d5d8d1d1cb3d1f (diff) | |
lib: yang: add yang_get_node_keys() function
- comment out unused mem-leaking function.
- improve yang_dnode_get_path return type
Signed-off-by: Christian Hopps <chopps@labn.net>
Diffstat (limited to 'lib/yang.c')
| -rw-r--r-- | lib/yang.c | 46 |
1 files changed, 20 insertions, 26 deletions
diff --git a/lib/yang.c b/lib/yang.c index a707469a78..33a6e1b6f7 100644 --- a/lib/yang.c +++ b/lib/yang.c @@ -364,33 +364,10 @@ unsigned int yang_snode_num_keys(const struct lysc_node *snode) return count; } -void yang_dnode_get_path(const struct lyd_node *dnode, char *xpath, - size_t xpath_len) +char *yang_dnode_get_path(const struct lyd_node *dnode, char *xpath, + size_t xpath_len) { - lyd_path(dnode, LYD_PATH_STD, xpath, xpath_len); -} - -const char *yang_dnode_get_schema_name(const struct lyd_node *dnode, - const char *xpath_fmt, ...) -{ - if (xpath_fmt) { - va_list ap; - char xpath[XPATH_MAXLEN]; - - va_start(ap, xpath_fmt); - vsnprintf(xpath, sizeof(xpath), xpath_fmt, ap); - va_end(ap); - - dnode = yang_dnode_get(dnode, xpath); - if (!dnode) { - flog_err(EC_LIB_YANG_DNODE_NOT_FOUND, - "%s: couldn't find %s", __func__, xpath); - zlog_backtrace(LOG_ERR); - abort(); - } - } - - return dnode->schema->name; + return lyd_path(dnode, LYD_PATH_STD, xpath, xpath_len); } struct lyd_node *yang_dnode_get(const struct lyd_node *dnode, const char *xpath) @@ -972,6 +949,23 @@ int yang_get_key_preds(char *s, const struct lysc_node *snode, return i; } +int yang_get_node_keys(struct lyd_node *node, struct yang_list_keys *keys) +{ + struct lyd_node *child = lyd_child(node); + + keys->num = 0; + for (; child && lysc_is_key(child->schema); child = child->next) { + const char *value = lyd_get_value(child); + + if (!value) + return NB_ERR; + strlcpy(keys->key[keys->num], value, + sizeof(keys->key[keys->num])); + keys->num++; + } + return NB_OK; +} + LY_ERR yang_lyd_new_list(struct lyd_node_inner *parent, const struct lysc_node *snode, const struct yang_list_keys *list_keys, |
