kconfig/menuconfig: do not hardcode '.config'
[powerpc.git] / scripts / kconfig / mconf.c
index 08a4c7a..d0e4fa5 100644 (file)
@@ -26,7 +26,6 @@
 #include "lkc.h"
 #include "lxdialog/dialog.h"
 
-static char menu_backtitle[128];
 static const char mconf_readme[] = N_(
 "Overview\n"
 "--------\n"
@@ -271,7 +270,6 @@ search_help[] = N_(
        "          USB$ => find all CONFIG_ symbols ending with USB\n"
        "\n");
 
-static char filename[PATH_MAX+1] = ".config";
 static int indent;
 static struct termios ios_org;
 static int rows = 0, cols = 0;
@@ -395,6 +393,28 @@ static struct gstr get_relations_str(struct symbol **sym_arr)
        return res;
 }
 
+static char filename[PATH_MAX+1];
+static void set_config_filename(const char *config_filename)
+{
+       static char menu_backtitle[PATH_MAX+128];
+       int size;
+       struct symbol *sym;
+
+       sym = sym_lookup("KERNELVERSION", 0);
+       sym_calc_value(sym);
+       size = snprintf(menu_backtitle, sizeof(menu_backtitle),
+                       _("%s - Linux Kernel v%s Configuration"),
+                       config_filename, sym_get_string_value(sym));
+       if (size >= sizeof(menu_backtitle))
+               menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
+       set_dialog_backtitle(menu_backtitle);
+
+       size = snprintf(filename, sizeof(filename), "%s", config_filename);
+       if (size >= sizeof(filename))
+               filename[sizeof(filename)-1] = '\0';
+}
+
+
 static void search_conf(void)
 {
        struct symbol **sym_arr;
@@ -816,8 +836,10 @@ static void conf_load(void)
                case 0:
                        if (!dialog_input_result[0])
                                return;
-                       if (!conf_read(dialog_input_result))
+                       if (!conf_read(dialog_input_result)) {
+                               set_config_filename(dialog_input_result);
                                return;
+                       }
                        show_textbox(NULL, _("File does not exist!"), 5, 38);
                        break;
                case 1:
@@ -840,8 +862,10 @@ static void conf_save(void)
                case 0:
                        if (!dialog_input_result[0])
                                return;
-                       if (!conf_write(dialog_input_result))
+                       if (!conf_write(dialog_input_result)) {
+                               set_config_filename(dialog_input_result);
                                return;
+                       }
                        show_textbox(NULL, _("Can't create file!  Probably a nonexistent directory."), 5, 60);
                        break;
                case 1:
@@ -860,7 +884,6 @@ static void conf_cleanup(void)
 
 int main(int ac, char **av)
 {
-       struct symbol *sym;
        char *mode;
        int res;
 
@@ -871,11 +894,6 @@ int main(int ac, char **av)
        conf_parse(av[1]);
        conf_read(NULL);
 
-       sym = sym_lookup("KERNELVERSION", 0);
-       sym_calc_value(sym);
-       sprintf(menu_backtitle, _("Linux Kernel v%s Configuration"),
-               sym_get_string_value(sym));
-
        mode = getenv("MENUCONFIG_MODE");
        if (mode) {
                if (!strcasecmp(mode, "single_menu"))
@@ -886,30 +904,38 @@ int main(int ac, char **av)
        atexit(conf_cleanup);
        init_wsize();
        reset_dialog();
-       init_dialog(menu_backtitle);
+       init_dialog(NULL);
+       set_config_filename(conf_get_configname());
        do {
                conf(&rootmenu);
                dialog_clear();
-               res = dialog_yesno(NULL,
-                                  _("Do you wish to save your "
-                                    "new kernel configuration?\n"
-                                    "<ESC><ESC> to continue."),
-                                  6, 60);
+               if (conf_get_changed())
+                       res = dialog_yesno(NULL,
+                                          _("Do you wish to save your "
+                                            "new kernel configuration?\n"
+                                            "<ESC><ESC> to continue."),
+                                          6, 60);
+               else
+                       res = -1;
        } while (res == KEY_ESC);
        end_dialog();
-       if (res == 0) {
-               if (conf_write(NULL)) {
+
+       switch (res) {
+       case 0:
+               if (conf_write(filename)) {
                        fprintf(stderr, _("\n\n"
                                "Error during writing of the kernel configuration.\n"
                                "Your kernel configuration changes were NOT saved."
                                "\n\n"));
                        return 1;
                }
+       case -1:
                printf(_("\n\n"
                        "*** End of Linux kernel configuration.\n"
                        "*** Execute 'make' to build the kernel or try 'make help'."
                        "\n\n"));
-       } else {
+               break;
+       default:
                fprintf(stderr, _("\n\n"
                        "Your kernel configuration changes were NOT saved."
                        "\n\n"));