Merging upstream version 3.12.2.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
6375ddbe5b
commit
580fa3f55c
66 changed files with 4041 additions and 2142 deletions
|
@ -505,7 +505,7 @@ lyd_new_inner(struct lyd_node *parent, const struct lys_module *module, const ch
|
|||
const struct ly_ctx *ctx = parent ? LYD_CTX(parent) : (module ? module->ctx : NULL);
|
||||
|
||||
LY_CHECK_ARG_RET(ctx, parent || module, parent || node, name, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
|
||||
if (!module) {
|
||||
module = parent->schema->module;
|
||||
|
@ -621,7 +621,7 @@ lyd_new_list(struct lyd_node *parent, const struct lys_module *module, const cha
|
|||
va_list ap;
|
||||
|
||||
LY_CHECK_ARG_RET(ctx, parent || module, parent || node, name, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
LY_CHECK_RET(lyd_new_val_get_format(options, &format));
|
||||
LY_CHECK_ARG_RET(ctx, !(store_only && (format == LY_VALUE_CANON || format == LY_VALUE_LYB)), LY_EINVAL);
|
||||
|
||||
|
@ -726,7 +726,7 @@ lyd_new_list2(struct lyd_node *parent, const struct lys_module *module, const ch
|
|||
uint32_t getnext_opts = (options & LYD_NEW_VAL_OUTPUT) ? LYS_GETNEXT_OUTPUT : 0;
|
||||
|
||||
LY_CHECK_ARG_RET(ctx, parent || module, parent || node, name, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
|
||||
if (!module) {
|
||||
module = parent->schema->module;
|
||||
|
@ -781,7 +781,7 @@ lyd_new_list3(struct lyd_node *parent, const struct lys_module *module, const ch
|
|||
|
||||
LY_CHECK_RET(lyd_new_val_get_format(options, &format));
|
||||
LY_CHECK_ARG_RET(ctx, parent || module, parent || node, name, (format != LY_VALUE_LYB) || value_lengths, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
LY_CHECK_ARG_RET(ctx, !(store_only && (format == LY_VALUE_CANON || format == LY_VALUE_LYB)), LY_EINVAL);
|
||||
|
||||
/* create the list node */
|
||||
|
@ -845,7 +845,7 @@ _lyd_new_term(struct lyd_node *parent, const struct lys_module *module, const ch
|
|||
LY_VALUE_FORMAT format;
|
||||
|
||||
LY_CHECK_ARG_RET(ctx, parent || module, parent || node, name, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
LY_CHECK_RET(lyd_new_val_get_format(options, &format));
|
||||
LY_CHECK_ARG_RET(ctx, !(store_only && (format == LY_VALUE_CANON || format == LY_VALUE_LYB)), LY_EINVAL);
|
||||
|
||||
|
@ -941,7 +941,7 @@ lyd_new_any(struct lyd_node *parent, const struct lys_module *module, const char
|
|||
|
||||
LY_CHECK_ARG_RET(ctx, parent || module, parent || node, name,
|
||||
(value_type == LYD_ANYDATA_DATATREE) || (value_type == LYD_ANYDATA_STRING) || value, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
|
||||
if (!module) {
|
||||
module = parent->schema->module;
|
||||
|
@ -1007,7 +1007,7 @@ lyd_new_meta(const struct ly_ctx *ctx, struct lyd_node *parent, const struct lys
|
|||
ly_bool store_only = options & LYD_NEW_VAL_STORE_ONLY;
|
||||
|
||||
LY_CHECK_ARG_RET(ctx, ctx || parent, name, module || strchr(name, ':'), parent || meta, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(ctx, parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, ctx, parent ? LYD_CTX(parent) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
if (!ctx) {
|
||||
ctx = module ? module->ctx : LYD_CTX(parent);
|
||||
}
|
||||
|
@ -1050,7 +1050,7 @@ lyd_new_meta2(const struct ly_ctx *ctx, struct lyd_node *parent, uint32_t option
|
|||
ly_bool store_only = options & LYD_NEW_VAL_STORE_ONLY;
|
||||
|
||||
LY_CHECK_ARG_RET(NULL, ctx, attr, parent || meta, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(ctx, parent ? LYD_CTX(parent) : NULL, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, ctx, parent ? LYD_CTX(parent) : NULL, LY_EINVAL);
|
||||
|
||||
if (parent && !parent->schema) {
|
||||
LOGERR(ctx, LY_EINVAL, "Cannot add metadata to an opaque node \"%s\".",
|
||||
|
@ -1092,7 +1092,7 @@ lyd_new_opaq(struct lyd_node *parent, const struct ly_ctx *ctx, const char *name
|
|||
uint32_t hints = 0;
|
||||
|
||||
LY_CHECK_ARG_RET(ctx, parent || ctx, parent || node, name, module_name, !prefix || !strcmp(prefix, module_name), LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(ctx, parent ? LYD_CTX(parent) : NULL, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, ctx, parent ? LYD_CTX(parent) : NULL, LY_EINVAL);
|
||||
|
||||
if (!ctx) {
|
||||
ctx = LYD_CTX(parent);
|
||||
|
@ -1122,7 +1122,7 @@ lyd_new_opaq2(struct lyd_node *parent, const struct ly_ctx *ctx, const char *nam
|
|||
struct lyd_node *ret = NULL;
|
||||
|
||||
LY_CHECK_ARG_RET(ctx, parent || ctx, parent || node, name, module_ns, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(ctx, parent ? LYD_CTX(parent) : NULL, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, ctx, parent ? LYD_CTX(parent) : NULL, LY_EINVAL);
|
||||
|
||||
if (!ctx) {
|
||||
ctx = LYD_CTX(parent);
|
||||
|
@ -1479,13 +1479,14 @@ cleanup:
|
|||
* @param[in] value_len Length of @p value.
|
||||
* @param[in] value_type Type of @p value for anydata/anyxml node.
|
||||
* @param[in] format Format of @p value.
|
||||
* @param[in] any_use_value Whether to spend @p value when updating an anydata/anyxml node or not.
|
||||
* @param[out] new_parent Set to @p node if the value was updated, otherwise set to NULL.
|
||||
* @param[out] new_node Set to @p node if the value was updated, otherwise set to NULL.
|
||||
* @return LY_ERR value.
|
||||
*/
|
||||
static LY_ERR
|
||||
lyd_new_path_update(struct lyd_node *node, const void *value, size_t value_len, LYD_ANYDATA_VALUETYPE value_type,
|
||||
LY_VALUE_FORMAT format, struct lyd_node **new_parent, struct lyd_node **new_node)
|
||||
LY_VALUE_FORMAT format, ly_bool any_use_value, struct lyd_node **new_parent, struct lyd_node **new_node)
|
||||
{
|
||||
LY_ERR ret = LY_SUCCESS;
|
||||
struct lyd_node *new_any;
|
||||
|
@ -1525,12 +1526,14 @@ lyd_new_path_update(struct lyd_node *node, const void *value, size_t value_len,
|
|||
case LYS_ANYDATA:
|
||||
case LYS_ANYXML:
|
||||
/* create a new any node */
|
||||
LY_CHECK_RET(lyd_create_any(node->schema, value, value_type, 0, &new_any));
|
||||
LY_CHECK_RET(lyd_create_any(node->schema, value, value_type, any_use_value, &new_any));
|
||||
|
||||
/* compare with the existing one */
|
||||
if (lyd_compare_single(node, new_any, 0)) {
|
||||
/* not equal, switch values (so that we can use generic node free) */
|
||||
((struct lyd_node_any *)new_any)->value = ((struct lyd_node_any *)node)->value;
|
||||
value = ((struct lyd_node_any *)new_any)->value.str;
|
||||
value_type = ((struct lyd_node_any *)new_any)->value_type;
|
||||
((struct lyd_node_any *)new_any)->value.str = ((struct lyd_node_any *)node)->value.str;
|
||||
((struct lyd_node_any *)new_any)->value_type = ((struct lyd_node_any *)node)->value_type;
|
||||
((struct lyd_node_any *)node)->value.str = value;
|
||||
((struct lyd_node_any *)node)->value_type = value_type;
|
||||
|
@ -1679,7 +1682,7 @@ lyd_new_path_(struct lyd_node *parent, const struct ly_ctx *ctx, const struct ly
|
|||
LY_CHECK_GOTO(ret = lyd_new_val_get_format(options, &format), cleanup);
|
||||
|
||||
/* parse path */
|
||||
LY_CHECK_GOTO(ret = ly_path_parse(ctx, NULL, path, strlen(path), 0, LY_PATH_BEGIN_EITHER, LY_PATH_PREFIX_FIRST,
|
||||
LY_CHECK_GOTO(ret = ly_path_parse(ctx, NULL, path, 0, 0, LY_PATH_BEGIN_EITHER, LY_PATH_PREFIX_FIRST,
|
||||
LY_PATH_PRED_SIMPLE, &exp), cleanup);
|
||||
|
||||
/* compile path */
|
||||
|
@ -1708,7 +1711,7 @@ lyd_new_path_(struct lyd_node *parent, const struct ly_ctx *ctx, const struct ly
|
|||
}
|
||||
|
||||
/* update the existing node */
|
||||
ret = lyd_new_path_update(node, value, value_len, value_type, format, &nparent, &nnode);
|
||||
ret = lyd_new_path_update(node, value, value_len, value_type, format, any_use_value, &nparent, &nnode);
|
||||
goto cleanup;
|
||||
} /* else we were not searching for the whole path */
|
||||
} else if (r == LY_EINCOMPLETE) {
|
||||
|
@ -1811,7 +1814,8 @@ lyd_new_path_(struct lyd_node *parent, const struct ly_ctx *ctx, const struct ly
|
|||
if (val) {
|
||||
LY_CHECK_GOTO(ret = lyd_create_term2(schema, val, &node), cleanup);
|
||||
} else {
|
||||
LY_CHECK_GOTO(ret = lyd_create_term(schema, value, value_len, 0, store_only, NULL, format, NULL, LYD_HINT_DATA, NULL, &node), cleanup);
|
||||
LY_CHECK_GOTO(ret = lyd_create_term(schema, value, value_len, 0, store_only, NULL, format, NULL,
|
||||
LYD_HINT_DATA, NULL, &node), cleanup);
|
||||
}
|
||||
break;
|
||||
case LYS_LEAF:
|
||||
|
@ -1836,15 +1840,16 @@ lyd_new_path_(struct lyd_node *parent, const struct ly_ctx *ctx, const struct ly
|
|||
if (value && (format == LY_VALUE_JSON) && !ly_strncmp("[null]", value, value_len)) {
|
||||
hints |= LYD_VALHINT_EMPTY;
|
||||
}
|
||||
LY_CHECK_GOTO(ret = lyd_create_opaq(ctx, schema->name, strlen(schema->name), NULL, 0,
|
||||
schema->module->name, strlen(schema->module->name), value, value_len, NULL, format, NULL, hints, &node),
|
||||
cleanup);
|
||||
ret = lyd_create_opaq(ctx, schema->name, strlen(schema->name), NULL, 0, schema->module->name,
|
||||
strlen(schema->module->name), value, value_len, NULL, format, NULL, hints, &node);
|
||||
LY_CHECK_GOTO(ret, cleanup);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* create a leaf instance */
|
||||
LY_CHECK_GOTO(ret = lyd_create_term(schema, value, value_len, 0, store_only, NULL, format, NULL, LYD_HINT_DATA, NULL, &node), cleanup);
|
||||
LY_CHECK_GOTO(ret = lyd_create_term(schema, value, value_len, 0, store_only, NULL, format, NULL,
|
||||
LYD_HINT_DATA, NULL, &node), cleanup);
|
||||
break;
|
||||
case LYS_ANYDATA:
|
||||
case LYS_ANYXML:
|
||||
|
@ -1903,7 +1908,7 @@ lyd_new_path(struct lyd_node *parent, const struct ly_ctx *ctx, const char *path
|
|||
{
|
||||
LY_CHECK_ARG_RET(ctx, parent || ctx, path, (path[0] == '/') || parent,
|
||||
!(options & LYD_NEW_VAL_BIN) || !(options & LYD_NEW_VAL_CANON), LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(parent ? LYD_CTX(parent) : NULL, ctx, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, parent ? LYD_CTX(parent) : NULL, ctx, LY_EINVAL);
|
||||
|
||||
return lyd_new_path_(parent, ctx, NULL, path, value, 0, LYD_ANYDATA_STRING, options, node, NULL);
|
||||
}
|
||||
|
@ -1915,7 +1920,7 @@ lyd_new_path2(struct lyd_node *parent, const struct ly_ctx *ctx, const char *pat
|
|||
{
|
||||
LY_CHECK_ARG_RET(ctx, parent || ctx, path, (path[0] == '/') || parent,
|
||||
!(options & LYD_NEW_VAL_BIN) || !(options & LYD_NEW_VAL_CANON), LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(parent ? LYD_CTX(parent) : NULL, ctx, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, parent ? LYD_CTX(parent) : NULL, ctx, LY_EINVAL);
|
||||
|
||||
return lyd_new_path_(parent, ctx, NULL, path, value, value_len, value_type, options, new_parent, new_node);
|
||||
}
|
||||
|
@ -1928,7 +1933,7 @@ lyd_new_ext_path(struct lyd_node *parent, const struct lysc_ext_instance *ext, c
|
|||
|
||||
LY_CHECK_ARG_RET(ctx, ext, path, (path[0] == '/') || parent,
|
||||
!(options & LYD_NEW_VAL_BIN) || !(options & LYD_NEW_VAL_CANON), LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(parent ? LYD_CTX(parent) : NULL, ctx, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, parent ? LYD_CTX(parent) : NULL, ctx, LY_EINVAL);
|
||||
|
||||
return lyd_new_path_(parent, ctx, ext, path, value, 0, LYD_ANYDATA_STRING, options, node, NULL);
|
||||
}
|
||||
|
@ -2150,7 +2155,7 @@ lyd_new_implicit_all(struct lyd_node **tree, const struct ly_ctx *ctx, uint32_t
|
|||
LY_ERR rc = LY_SUCCESS;
|
||||
|
||||
LY_CHECK_ARG_RET(ctx, tree, *tree || ctx, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(*tree ? LYD_CTX(*tree) : NULL, ctx, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, *tree ? LYD_CTX(*tree) : NULL, ctx, LY_EINVAL);
|
||||
if (diff) {
|
||||
*diff = NULL;
|
||||
}
|
||||
|
@ -2191,7 +2196,7 @@ lyd_new_implicit_module(struct lyd_node **tree, const struct lys_module *module,
|
|||
struct ly_ht *getnext_ht = NULL;
|
||||
|
||||
LY_CHECK_ARG_RET(NULL, tree, module, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(*tree ? LYD_CTX(*tree) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
LY_CHECK_CTX_EQUAL_RET(__func__, *tree ? LYD_CTX(*tree) : NULL, module ? module->ctx : NULL, LY_EINVAL);
|
||||
if (diff) {
|
||||
*diff = NULL;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue