bootconfig: Prohibit re-defining value on same key

Currently, bootconfig adds a new value on the existing key to the tail of an
array. But this looks a bit confusing because an admin can easily rewrite
the original value in the same config file.

This rejects the following value re-definition.

  key = value1
  ...
  key = value2

You should rewrite value1 to value2 in this case.

Link: http://lkml.kernel.org/r/158227282199.12842.10110929876059658601.stgit@devnote2

Suggested-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
[ Fixed spelling of arraies to arrays ]
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
Masami Hiramatsu
2020-02-21 17:13:42 +09:00
committed by Steven Rostedt (VMware)
parent 88b913718d
commit 4e4694d872
3 changed files with 24 additions and 6 deletions

View File

@@ -581,7 +581,7 @@ static int __init __xbc_parse_keys(char *k)
static int __init xbc_parse_kv(char **k, char *v)
{
struct xbc_node *prev_parent = last_parent;
struct xbc_node *node, *child;
struct xbc_node *child;
char *next;
int c, ret;
@@ -590,15 +590,18 @@ static int __init xbc_parse_kv(char **k, char *v)
return ret;
child = xbc_node_get_child(last_parent);
if (child && xbc_node_is_key(child))
return xbc_parse_error("Value is mixed with subkey", v);
if (child) {
if (xbc_node_is_key(child))
return xbc_parse_error("Value is mixed with subkey", v);
else
return xbc_parse_error("Value is redefined", v);
}
c = __xbc_parse_value(&v, &next);
if (c < 0)
return c;
node = xbc_add_sibling(v, XBC_VALUE);
if (!node)
if (!xbc_add_sibling(v, XBC_VALUE))
return -ENOMEM;
if (c == ',') { /* Array */