From: Karsten Wiese Returns sym_change_count to reflect the .config's change state. All read only accesses of sym_change_count are replaced by calls to conf_get_changed() . mconfig.c is manipulated to ask for saving only when conf_get_changed() returned true. Signed-off-by: Karsten Wiese Cc: Sam Ravnborg Cc: Roman Zippel Signed-off-by: Andrew Morton --- scripts/kconfig/conf.c | 2 +- scripts/kconfig/confdata.c | 7 ++++++- scripts/kconfig/lkc_proto.h | 1 + scripts/kconfig/mconf.c | 21 ++++++++++++++------- scripts/kconfig/qconf.cc | 2 +- 5 files changed, 23 insertions(+), 10 deletions(-) diff -puN scripts/kconfig/conf.c~kconfig-new-function-bool-conf_get_changedvoid scripts/kconfig/conf.c --- a/scripts/kconfig/conf.c~kconfig-new-function-bool-conf_get_changedvoid +++ a/scripts/kconfig/conf.c @@ -600,7 +600,7 @@ int main(int ac, char **av) input_mode = ask_silent; valid_stdin = 1; } - } else if (sym_change_count) { + } else if (conf_get_changed()) { name = getenv("KCONFIG_NOSILENTUPDATE"); if (name && *name) { fprintf(stderr, _("\n*** Kernel configuration requires explicit update.\n\n")); diff -puN scripts/kconfig/confdata.c~kconfig-new-function-bool-conf_get_changedvoid scripts/kconfig/confdata.c --- a/scripts/kconfig/confdata.c~kconfig-new-function-bool-conf_get_changedvoid +++ a/scripts/kconfig/confdata.c @@ -432,7 +432,7 @@ int conf_write(const char *name) use_timestamp ? "# " : "", use_timestamp ? ctime(&now) : ""); - if (!sym_change_count) + if (!conf_get_changed()) sym_clear_all_valid(); menu = rootmenu.list; @@ -765,3 +765,8 @@ int conf_write_autoconf(void) return 0; } + +bool conf_get_changed(void) +{ + return sym_change_count; +} diff -puN scripts/kconfig/lkc_proto.h~kconfig-new-function-bool-conf_get_changedvoid scripts/kconfig/lkc_proto.h --- a/scripts/kconfig/lkc_proto.h~kconfig-new-function-bool-conf_get_changedvoid +++ a/scripts/kconfig/lkc_proto.h @@ -5,6 +5,7 @@ P(conf_read,int,(const char *name)); P(conf_read_simple,int,(const char *name, int)); P(conf_write,int,(const char *name)); P(conf_write_autoconf,int,(void)); +P(conf_get_changed,bool,(void)); /* menu.c */ P(rootmenu,struct menu,); diff -puN scripts/kconfig/mconf.c~kconfig-new-function-bool-conf_get_changedvoid scripts/kconfig/mconf.c --- a/scripts/kconfig/mconf.c~kconfig-new-function-bool-conf_get_changedvoid +++ a/scripts/kconfig/mconf.c @@ -890,14 +890,19 @@ int main(int ac, char **av) do { conf(&rootmenu); dialog_clear(); - res = dialog_yesno(NULL, - _("Do you wish to save your " - "new kernel configuration?\n" - " to continue."), - 6, 60); + if (conf_get_changed()) + res = dialog_yesno(NULL, + _("Do you wish to save your " + "new kernel configuration?\n" + " to continue."), + 6, 60); + else + res = -1; } while (res == KEY_ESC); end_dialog(); - if (res == 0) { + + switch (res) { + case 0: if (conf_write(NULL)) { fprintf(stderr, _("\n\n" "Error during writing of the kernel configuration.\n" @@ -905,11 +910,13 @@ int main(int ac, char **av) "\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")); diff -puN scripts/kconfig/qconf.cc~kconfig-new-function-bool-conf_get_changedvoid scripts/kconfig/qconf.cc --- a/scripts/kconfig/qconf.cc~kconfig-new-function-bool-conf_get_changedvoid +++ a/scripts/kconfig/qconf.cc @@ -1584,7 +1584,7 @@ void ConfigMainWindow::showFullView(void */ void ConfigMainWindow::closeEvent(QCloseEvent* e) { - if (!sym_change_count) { + if (!conf_get_changed()) { e->accept(); return; } _