From 04b4b91c1092eb054b8e0ddef72052170ef3e4ae Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Fri, 23 Mar 2018 02:00:13 +0900 Subject: [PATCH] kconfig: detect recursive inclusion earlier Currently, the recursive inclusion is not detected when the offending file is about to be included; it is detected the offending file is about to include the *next* file. This is because the detection loop does not involve the file being included. Do this check against the file that is about to be included so that the recursive inclusion is detected before unneeded parsing happens. Signed-off-by: Masahiro Yamada Signed-off-by: Christian Lamparter --- config/zconf.l | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/config/zconf.l b/config/zconf.l index 0e8b892..64ec778 100644 --- a/config/zconf.l +++ b/config/zconf.l @@ -325,23 +325,25 @@ void zconf_nextfile(const char *name) buf->parent = current_buf; current_buf = buf; - for (iter = current_file->parent; iter; iter = iter->parent ) { - if (!strcmp(current_file->name,iter->name) ) { + file->parent = current_file; + + for (iter = current_file; iter; iter = iter->parent) { + if (!strcmp(iter->name, file->name)) { fprintf(stderr, "Recursive inclusion detected.\n" "Inclusion path:\n" - " current file : %s\n", zconf_curname()); - iter = current_file; + " current file : %s\n", file->name); + iter = file; do { iter = iter->parent; fprintf(stderr, " included from: %s:%d\n", iter->name, iter->lineno - 1); - } while (strcmp(iter->name, current_file->name)); + } while (strcmp(iter->name, file->name)); exit(1); } } + file->lineno = 1; - file->parent = current_file; current_file = file; } -- 2.31.1