]> granicus.if.org Git - esp-idf/commitdiff
kconfig: Don't create "split" directory structures under build/include/config
authorAngus Gratton <angus@espressif.com>
Mon, 15 Apr 2019 04:30:33 +0000 (14:30 +1000)
committerbot <bot@espressif.com>
Tue, 10 Sep 2019 05:52:29 +0000 (05:52 +0000)
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

index 2a8d5b54d65c501585971f2bb238530de63f6ec7..70f6ab7fc21938a0ce30f0838295d31a41563df2 100644 (file)
@@ -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;