Re: [PATCH v5 01/22] bootconfig: Add Extra Boot Config support
From: Masami Hiramatsu <mhiramat@kernel.org>
Date: 2020-01-08 05:17:09
Also in:
linux-fsdevel, lkml
Hi Steve, On Tue, 7 Jan 2020 20:59:45 -0500 Steven Rostedt [off-list ref] wrote:
On Thu, 26 Dec 2019 23:04:00 +0900 Masami Hiramatsu [off-list ref] wrote:quoted
+/** + * xbc_node_is_value() - Test the node is a value node + * @node: An XBC node. + * + * Test the @node is a value node and return true if a value node, false if not. + */ +static inline __init bool xbc_node_is_value(struct xbc_node *node) +{ + return !!(node->data & XBC_VALUE);The "!!" is not needed, as this is a static inline bool function. The compiler will make this a 1 or 0 without it. return node->data & XBC_VALUE; is sufficient.
OK.
quoted
+} + +/** + * xbc_node_is_key() - Test the node is a key node + * @node: An XBC node. + * + * Test the @node is a key node and return true if a key node, false if not. + */ +static inline __init bool xbc_node_is_key(struct xbc_node *node) +{ + return !(node->data & XBC_VALUE); +} +
Maybe this is better use xbc_node_is_value() return !xbc_node_is_value(); Right?
quoted
+ +/* + * Return delimiter or error, no node added. As same as lib/cmdline.c, + * you can use " around spaces, but can't escape " for value. + */ +static int __init __xbc_parse_value(char **__v, char **__n) +{ + char *p, *v = *__v; + int c, quotes = 0; + + v = skip_spaces(v); + while (*v == '#') { + v = skip_comment(v); + v = skip_spaces(v); + } + if (*v == '"' || *v == '\'') { + quotes = *v; + v++; + } + p = v - 1; + while ((c = *++p)) { + if (!isprint(c) && !isspace(c)) + return xbc_parse_error("Non printable value", p); + if (quotes) { + if (c != quotes) + continue; + quotes = 0; + *p++ = '\0'; + p = skip_spaces(p);Hmm, if p here == " \0" then skip_spaces() will make p == "\0"quoted
+ c = *p; + if (c && !strchr(",;\n#}", c)) + return xbc_parse_error("No value delimiter", p); + p++;Now p == one passed "\0" which is in unknown territory.
Ah, right!
quoted
+ break; + } + if (strchr(",;\n#}", c)) {Also, why are we looking at '\n'? as wouldn't that get skipped by skip_spaces() too?
I forgot that '\n' is also isspace() true... Thank you!
-- Stevequoted
+ v = strim(v); + *p++ = '\0'; + break; + } + } + if (quotes) + return xbc_parse_error("No closing quotes", p); + if (c == '#') { + p = skip_comment(p); + c = *p; + } + *__n = p; + *__v = v; + + return c; +} +
-- Masami Hiramatsu [off-list ref]