summaryrefslogtreecommitdiffstats
path: root/scripts/kconfig/zconf.l
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-05-25 16:54:01 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2011-05-25 16:54:01 -0700
commitf3ae1c75203535f65448517e46c8dd70a56b6c71 (patch)
tree58f719cb97666dcfb3392c6c0547d6cbce2e68c8 /scripts/kconfig/zconf.l
parent9720d75399fd2655a6b6fb06abcf548150f22362 (diff)
parentd49e46875c11a09e80e76c66db90710369b8fe12 (diff)
Merge branch 'kconfig-for-40' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6
* 'kconfig-for-40' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6: xconfig: merge code path to conf_write() kconfig: do not record timestamp in .config gconfig: Hide unused left treeview when start up the interface gconfig: enable rules hint for main treeviews MAINTAINERS: Update KCONFIG entry kconfig-language: add to hints kconfig: Document the new "visible if" syntax kconfig: quiet commands when V=0 kconfig: change update-po-config to reflect new layout of arch/um kconfig: make update-po-config work in KBUILD_OUTPUT kconfig: rearrange clean-files kconfig: change gconf to modify hostprogs-y like nconf and mconf kconfig: change qconf to modify hostprogs-y like nconf and mconf kconfig: only build kxgettext when needed nconfig: Silence unused return values from wattrset kconfig: Do not record timestamp in auto.conf and autoconf.h kconfig: get rid of unused flags kconfig: allow multiple inclusion of the same file kconfig: Avoid buffer underrun in choice input
Diffstat (limited to 'scripts/kconfig/zconf.l')
-rw-r--r--scripts/kconfig/zconf.l33
1 files changed, 19 insertions, 14 deletions
diff --git a/scripts/kconfig/zconf.l b/scripts/kconfig/zconf.l
index 3dbaec185cc4..b22f884f9022 100644
--- a/scripts/kconfig/zconf.l
+++ b/scripts/kconfig/zconf.l
@@ -294,11 +294,11 @@ void zconf_initscan(const char *name)
current_file = file_lookup(name);
current_file->lineno = 1;
- current_file->flags = FILE_BUSY;
}
void zconf_nextfile(const char *name)
{
+ struct file *iter;
struct file *file = file_lookup(name);
struct buffer *buf = malloc(sizeof(*buf));
memset(buf, 0, sizeof(*buf));
@@ -314,18 +314,25 @@ void zconf_nextfile(const char *name)
buf->parent = current_buf;
current_buf = buf;
- if (file->flags & FILE_BUSY) {
- printf("%s:%d: do not source '%s' from itself\n",
- zconf_curname(), zconf_lineno(), name);
- exit(1);
- }
- if (file->flags & FILE_SCANNED) {
- printf("%s:%d: file '%s' is already sourced from '%s'\n",
- zconf_curname(), zconf_lineno(), name,
- file->parent->name);
- exit(1);
+ for (iter = current_file->parent; iter; iter = iter->parent ) {
+ if (!strcmp(current_file->name,iter->name) ) {
+ printf("%s:%d: recursive inclusion detected. "
+ "Inclusion path:\n current file : '%s'\n",
+ zconf_curname(), zconf_lineno(),
+ zconf_curname());
+ iter = current_file->parent;
+ while (iter && \
+ strcmp(iter->name,current_file->name)) {
+ printf(" included from: '%s:%d'\n",
+ iter->name, iter->lineno-1);
+ iter = iter->parent;
+ }
+ if (iter)
+ printf(" included from: '%s:%d'\n",
+ iter->name, iter->lineno+1);
+ exit(1);
+ }
}
- file->flags |= FILE_BUSY;
file->lineno = 1;
file->parent = current_file;
current_file = file;
@@ -335,8 +342,6 @@ static void zconf_endfile(void)
{
struct buffer *parent;
- current_file->flags |= FILE_SCANNED;
- current_file->flags &= ~FILE_BUSY;
current_file = current_file->parent;
parent = current_buf->parent;