From 49e12766bcd39a771cb85bb5671ab0ea3ee8d7ad Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Sun, 25 Jun 2006 20:06:59 +0000
Subject: [PATCH] add 'reset to defaults' to menuconfig

SVN-Revision: 4080
---
 openwrt/scripts/config/confdata.c  | 23 +++++++++++++++++++++++
 openwrt/scripts/config/lkc_proto.h |  1 +
 openwrt/scripts/config/mconf.c     |  5 +++++
 3 files changed, 29 insertions(+)

diff --git a/openwrt/scripts/config/confdata.c b/openwrt/scripts/config/confdata.c
index a1abdeb087..641aa48915 100644
--- a/openwrt/scripts/config/confdata.c
+++ b/openwrt/scripts/config/confdata.c
@@ -83,6 +83,29 @@ char *conf_get_default_confname(void)
 	return name;
 }
 
+void conf_reset(void)
+{
+	struct symbol *sym;
+	int i;
+	
+	for_all_symbols(i, sym) {
+		sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED;
+		if (sym_is_choice(sym))
+			sym->flags &= ~SYMBOL_NEW;
+		sym->flags &= ~SYMBOL_VALID;
+		switch (sym->type) {
+		case S_INT:
+		case S_HEX:
+		case S_STRING:
+			if (sym->user.val)
+				free(sym->user.val);
+		default:
+			sym->user.val = NULL;
+			sym->user.tri = no;
+		}
+	}
+}
+
 int conf_read_simple(const char *name)
 {
 	FILE *in = NULL;
diff --git a/openwrt/scripts/config/lkc_proto.h b/openwrt/scripts/config/lkc_proto.h
index b6a389c5fc..15fafd01b0 100644
--- a/openwrt/scripts/config/lkc_proto.h
+++ b/openwrt/scripts/config/lkc_proto.h
@@ -2,6 +2,7 @@
 /* confdata.c */
 P(conf_parse,void,(const char *name));
 P(conf_read,int,(const char *name));
+P(conf_reset,void,(void));
 P(conf_read_simple,int,(const char *name));
 P(conf_write,int,(const char *name));
 
diff --git a/openwrt/scripts/config/mconf.c b/openwrt/scripts/config/mconf.c
index 2ef24aa5b6..5caf82280d 100644
--- a/openwrt/scripts/config/mconf.c
+++ b/openwrt/scripts/config/mconf.c
@@ -737,6 +737,8 @@ static void conf(struct menu *menu)
 		if (menu == &rootmenu) {
 			cprint(":");
 			cprint("--- ");
+			cprint("D");
+			cprint(_("    Reset to defaults"));
 			cprint("L");
 			cprint(_("    Load an Alternate Configuration File"));
 			cprint("S");
@@ -783,6 +785,9 @@ static void conf(struct menu *menu)
 			case 's':
 				conf_string(submenu);
 				break;
+			case 'D':
+				conf_reset();
+				break;
 			case 'L':
 				conf_load();
 				break;
-- 
GitLab