From 9a5e93c286ce49e07f5aca09bc087a866f70e072 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Mon, 15 Apr 2019 14:30:33 +1000 Subject: [PATCH] kconfig: Don't create "split" directory structures under build/include/config Reported in https://github.com/espressif/esp-idf/issues/3299 If a config item contains a reserved filename in Windows like _CON_ then an invalid directory is created. We don't rely on this feature all, so disable it. --- tools/kconfig/confdata.c | 116 --------------------------------------- 1 file changed, 116 deletions(-) diff --git a/tools/kconfig/confdata.c b/tools/kconfig/confdata.c index 2a8d5b54d6..70f6ab7fc2 100644 --- a/tools/kconfig/confdata.c +++ b/tools/kconfig/confdata.c @@ -831,119 +831,6 @@ next: return 0; } -static int conf_split_config(void) -{ - const char *name; - char path[PATH_MAX+1]; - char *s, *d, c; - struct symbol *sym; - struct stat sb; - int res, i, fd; - - name = conf_get_autoconfig_name(); - conf_read_simple(name, S_DEF_AUTO); - sym_calc_value(modules_sym); - - if (chdir("include/config")) - return 1; - - res = 0; - for_all_symbols(i, sym) { - sym_calc_value(sym); - if ((sym->flags & SYMBOL_AUTO) || !sym->name) - continue; - if (sym->flags & SYMBOL_WRITE) { - if (sym->flags & SYMBOL_DEF_AUTO) { - /* - * symbol has old and new value, - * so compare them... - */ - switch (sym->type) { - case S_BOOLEAN: - case S_TRISTATE: - if (sym_get_tristate_value(sym) == - sym->def[S_DEF_AUTO].tri) - continue; - break; - case S_STRING: - case S_HEX: - case S_INT: - if (!strcmp(sym_get_string_value(sym), - sym->def[S_DEF_AUTO].val)) - continue; - break; - default: - break; - } - } else { - /* - * If there is no old value, only 'no' (unset) - * is allowed as new value. - */ - switch (sym->type) { - case S_BOOLEAN: - case S_TRISTATE: - if (sym_get_tristate_value(sym) == no) - continue; - break; - default: - break; - } - } - } else if (!(sym->flags & SYMBOL_DEF_AUTO)) - /* There is neither an old nor a new value. */ - continue; - /* else - * There is an old value, but no new value ('no' (unset) - * isn't saved in auto.conf, so the old value is always - * different from 'no'). - */ - - /* Replace all '_' and append ".h" */ - s = sym->name; - d = path; - while ((c = *s++)) { - c = tolower(c); - *d++ = (c == '_') ? '/' : c; - } - strcpy(d, ".h"); - - /* Assume directory path already exists. */ - fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644); - if (fd == -1) { - if (errno != ENOENT) { - res = 1; - break; - } - /* - * Create directory components, - * unless they exist already. - */ - d = path; - while ((d = strchr(d, '/'))) { - *d = 0; - if (stat(path, &sb) && mkdir(path, 0755)) { - res = 1; - goto out; - } - *d++ = '/'; - } - /* Try it again. */ - fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644); - if (fd == -1) { - res = 1; - break; - } - } - close(fd); - } -out: - if (chdir("../..")) - return 1; - - return res; -} - int conf_write_autoconf(void) { struct symbol *sym; @@ -955,9 +842,6 @@ int conf_write_autoconf(void) file_write_dep("include/config/auto.conf.cmd"); - if (conf_split_config()) - return 1; - out = fopen(".tmpconfig", "w"); if (!out) return 1;