wifi: ieee80211: correctly mark FTM frames non-bufferable
[carl9170fw.git] / config / confdata.c
index a38b508788d8775af0f44cbbff0a5709fdcd3504..99664fd2de23bb15dc29dd6d1897a0dcc1a6f60a 100644 (file)
@@ -5,6 +5,7 @@
 
 #include <sys/mman.h>
 #include <sys/stat.h>
+#include <sys/types.h>
 #include <ctype.h>
 #include <errno.h>
 #include <fcntl.h>
@@ -534,11 +535,9 @@ int conf_read(const char *name)
                        switch (sym->type) {
                        case S_BOOLEAN:
                        case S_TRISTATE:
-                               if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym))
-                                       break;
-                               if (!sym_is_choice(sym))
+                               if (sym->def[S_DEF_USER].tri == sym_get_tristate_value(sym))
                                        continue;
-                               /* fall through */
+                               break;
                        default:
                                if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val))
                                        continue;
@@ -758,25 +757,6 @@ static struct conf_printer header_printer_cb =
        .print_comment = header_print_comment,
 };
 
-/*
- * Tristate printer
- *
- * This printer is used when generating the `include/generated/tristate.conf' file.
- */
-static void
-tristate_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
-{
-
-       if (sym->type == S_TRISTATE && *value != 'n')
-               fprintf(fp, "%s%s=%c\n", CONFIG_, sym->name, (char)toupper(*value));
-}
-
-static struct conf_printer tristate_printer_cb =
-{
-       .print_symbol = tristate_print_symbol,
-       .print_comment = kconfig_print_comment,
-};
-
 static void conf_write_symbol(FILE *fp, struct symbol *sym,
                              struct conf_printer *printer, void *printer_arg)
 {
@@ -896,6 +876,7 @@ int conf_write(const char *name)
        const char *str;
        char tmpname[PATH_MAX + 1], oldname[PATH_MAX + 1];
        char *env;
+       int i;
        bool need_newline = false;
 
        if (!name)
@@ -943,7 +924,8 @@ int conf_write(const char *name)
                                     "# %s\n"
                                     "#\n", str);
                        need_newline = false;
-               } else if (!(sym->flags & SYMBOL_CHOICE)) {
+               } else if (!(sym->flags & SYMBOL_CHOICE) &&
+                          !(sym->flags & SYMBOL_WRITTEN)) {
                        sym_calc_value(sym);
                        if (!(sym->flags & SYMBOL_WRITE))
                                goto next;
@@ -951,7 +933,7 @@ int conf_write(const char *name)
                                fprintf(out, "\n");
                                need_newline = false;
                        }
-                       sym->flags &= ~SYMBOL_WRITE;
+                       sym->flags |= SYMBOL_WRITTEN;
                        conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
                }
 
@@ -977,6 +959,9 @@ next:
        }
        fclose(out);
 
+       for_all_symbols(i, sym)
+               sym->flags &= ~SYMBOL_WRITTEN;
+
        if (*tmpname) {
                if (is_same(name, tmpname)) {
                        conf_message("No change to %s", name);
@@ -1105,14 +1090,12 @@ int conf_write_autoconf(int overwrite)
        struct symbol *sym;
        const char *name;
        const char *autoconf_name = conf_get_autoconfig_name();
-       FILE *out, *tristate, *out_h, *out_c;
+       FILE *out, *out_h, *out_c;
        int i;
 
        if (!overwrite && is_present(autoconf_name))
                return 0;
 
-       sym_clear_all_valid();
-
        conf_write_dep("include/generated/auto.conf.cmd");
 
        if (conf_touch_deps())
@@ -1122,30 +1105,20 @@ int conf_write_autoconf(int overwrite)
        if (!out)
                return 1;
 
-       tristate = fopen(".tmpconfig_tristate", "w");
-       if (!tristate) {
-               fclose(out);
-               return 1;
-       }
-
        out_h = fopen(".tmpconfig.h", "w");
        if (!out_h) {
                fclose(out);
-               fclose(tristate);
                return 1;
        }
 
        out_c = fopen(".tmpconfig.cmake", "w");
        if (!out_c) {
                fclose(out);
-               fclose(tristate);
                fclose(out_h);
        }
 
        conf_write_heading(out, &kconfig_printer_cb, NULL);
 
-       conf_write_heading(tristate, &tristate_printer_cb, NULL);
-
        conf_write_heading(out_h, &header_printer_cb, NULL);
 
        conf_write_heading(out_c, &kconfig_printer_cmake_cb, NULL);
@@ -1155,17 +1128,14 @@ int conf_write_autoconf(int overwrite)
                if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
                        continue;
 
-               /* write symbol to auto.conf, tristate and header files */
+               /* write symbol to auto.conf and header files */
                conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1);
 
-               conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1);
-
                conf_write_symbol(out_h, sym, &header_printer_cb, NULL);
 
                conf_write_symbol(out_c, sym, &kconfig_printer_cmake_cb, NULL);
        }
        fclose(out);
-       fclose(tristate);
        fclose(out_h);
        fclose(out_c);
 
@@ -1177,14 +1147,6 @@ int conf_write_autoconf(int overwrite)
        if (rename(".tmpconfig.h", name))
                return 1;
 
-       name = getenv("KCONFIG_TRISTATE");
-       if (!name)
-               name = "include/generated/tristate.conf";
-       if (make_parent_dir(name))
-               return 1;
-       if (rename(".tmpconfig_tristate", name))
-               return 1;
-
        if (make_parent_dir(autoconf_name))
                return 1;
 
@@ -1419,7 +1381,7 @@ bool conf_set_all_new_symbols(enum conf_def_mode mode)
 
                sym_calc_value(csym);
                if (mode == def_random)
-                       has_changed = randomize_choice_values(csym);
+                       has_changed |= randomize_choice_values(csym);
                else {
                        set_all_choice_values(csym);
                        has_changed = true;
@@ -1428,3 +1390,18 @@ bool conf_set_all_new_symbols(enum conf_def_mode mode)
 
        return has_changed;
 }
+
+void conf_rewrite_mod_or_yes(enum conf_def_mode mode)
+{
+       struct symbol *sym;
+       int i;
+       tristate old_val = (mode == def_y2m) ? yes : mod;
+       tristate new_val = (mode == def_y2m) ? mod : yes;
+
+       for_all_symbols(i, sym) {
+               if (sym_get_type(sym) == S_TRISTATE &&
+                   sym->def[S_DEF_USER].tri == old_val)
+                       sym->def[S_DEF_USER].tri = new_val;
+       }
+       sym_clear_all_valid();
+}