Move the config parsing into a separate function so that is is possible to write tests for the function.
Signed-off-by: Simon Glass <s...@chromium.org> --- scripts/basic/fixdep.c | 87 ++++++++++++++++++++++++++---------------- 1 file changed, 54 insertions(+), 33 deletions(-) diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c index 3d40bd7ee25..a49d35ba5f6 100644 --- a/scripts/basic/fixdep.c +++ b/scripts/basic/fixdep.c @@ -236,47 +236,68 @@ static int str_ends_with(const char *s, int slen, const char *sub) return !memcmp(s + slen - sublen, sub, sublen); } -static void parse_config_file(const char *p) +static const char *parse_config_line(const char *p, const char **endp) { const char *q, *r; - const char *start = p; - while ((p = strstr(p, "CONFIG_"))) { - if (p > start && (isalnum(p[-1]) || p[-1] == '_')) { - p += 7; - continue; - } - p += 7; + p = strstr(p, "CONFIG_"); + if (!p) { + *endp = NULL; + return NULL; + } + if ((isalnum(p[-1]) || p[-1] == '_')) { + *endp = p + 7; + return NULL; + } + p += 7; + q = p; + while (isalnum(*q) || *q == '_') + q++; + if (str_ends_with(p, q - p, "_MODULE")) + r = q - 7; + else + r = q; + /* + * U-Boot also handles + * CONFIG_IS_ENABLED(...) + * CONFIG_VAL(...) + */ + if ((q - p == 10 && !memcmp(p, "IS_ENABLED(", 11)) || + (q - p == 3 && !memcmp(p, "VAL(", 4))) { + p = q + 1; q = p; while (isalnum(*q) || *q == '_') q++; - if (str_ends_with(p, q - p, "_MODULE")) - r = q - 7; - else - r = q; - /* - * U-Boot also handles - * CONFIG_IS_ENABLED(...) - * CONFIG_VAL(...) - */ - if ((q - p == 10 && !memcmp(p, "IS_ENABLED(", 11)) || - (q - p == 3 && !memcmp(p, "VAL(", 4))) { - p = q + 1; - q = p; - while (isalnum(*q) || *q == '_') - q++; - r = q; - if (r > p && tmp_buf[0]) { - memcpy(tmp_buf + 4, p, r - p); - r = tmp_buf + 4 + (r - p); - p = tmp_buf; - } + r = q; + if (r > p && tmp_buf[0]) { + memcpy(tmp_buf + 4, p, r - p); + r = tmp_buf + 4 + (r - p); + p = tmp_buf; } - /* end U-Boot hack */ + } + /* end U-Boot hack */ + *endp = r; + + if (r > p) + return p; - if (r > p) - use_config(p, r - p); - p = q; + return NULL; +} + +static void parse_config_file(const char *base) +{ + const char *p; + + if (!*base) + return; + p = base + 1; + while (p) { + const char *out, *end; + + out = parse_config_line(p, &end); + if (out) + use_config(out, end - out); + p = end; } } -- 2.39.1.456.gfc5497dd1b-goog