---
 confdata.c |   57 +++++++++++++++++++++++++++++----------------------------
 lkc.h      |    2 +-
 menu.c     |    2 +-
 3 files changed, 31 insertions(+), 30 deletions(-)

Index: kconfig/confdata.c
===================================================================
--- kconfig.orig/confdata.c
+++ kconfig/confdata.c
@@ -12,6 +12,7 @@
 #include <string.h>
 #include <time.h>
 #include <unistd.h>
+#include <libgen.h>
 
 #define LKC_DIRECT_LINK
 #include "lkc.h"
@@ -25,7 +26,7 @@
 static const char *conf_filename;
 static int conf_lineno, conf_warnings, conf_unsaved;
 
-const char conf_defname[] = "arch/$ARCH/defconfig";
+const char conf_defname[] = ".defconfig";
 
 static void conf_warning(const char *fmt, ...)
 {
@@ -63,7 +64,7 @@
 
 const char *conf_get_configname(void)
 {
-	char *name = getenv("KCONFIG_CONFIG");
+	char *name = getenv("BUILDROOT_CONFIG");
 
 	return name ? name : ".config";
 }
@@ -249,20 +250,20 @@
 		if (line[0] == '#') {
 			if (memcmp(line + 2, CONFIG_, strlen(CONFIG_)))
 				continue;
-			p = strchr(line + 2 + strlen(CONFIG_), ' ');
+			p = strchr(line + 2, ' ');
 			if (!p)
 				continue;
 			*p++ = 0;
 			if (strncmp(p, "is not set", 10))
 				continue;
 			if (def == S_DEF_USER) {
-				sym = sym_find(line + 2 + strlen(CONFIG_));
+				sym = sym_find(line + 2);
 				if (!sym) {
 					sym_add_change_count(1);
 					goto setsym;
 				}
 			} else {
-				sym = sym_lookup(line + 2 + strlen(CONFIG_), 0);
+				sym = sym_lookup(line + 2, 0);
 				if (sym->type == S_UNKNOWN)
 					sym->type = S_BOOLEAN;
 			}
@@ -278,8 +279,8 @@
 			default:
 				;
 			}
-		} else if (memcmp(line, CONFIG_, strlen(CONFIG_)) == 0) {
-			p = strchr(line + strlen(CONFIG_), '=');
+		} else if (isupper(line[0])) {
+			p = strchr(line, '=');
 			if (!p)
 				continue;
 			*p++ = 0;
@@ -290,13 +291,13 @@
 					*p2 = 0;
 			}
 			if (def == S_DEF_USER) {
-				sym = sym_find(line + strlen(CONFIG_));
+				sym = sym_find(line);
 				if (!sym) {
 					sym_add_change_count(1);
 					goto setsym;
 				}
 			} else {
-				sym = sym_lookup(line + strlen(CONFIG_), 0);
+				sym = sym_lookup(line, 0);
 				if (sym->type == S_UNKNOWN)
 					sym->type = S_OTHER;
 			}
@@ -423,9 +424,9 @@
 {
 	int l;
 	if (headerfile)
-		fprintf(out, "#define %s%s \"", CONFIG_, name);
+		fprintf(out, "#define %s \"", name);
 	else
-		fprintf(out, "%s%s=\"", CONFIG_, name);
+		fprintf(out, "%s=\"", name);
 
 	while (1) {
 		l = strcspn(str, "\"\\");
@@ -450,14 +451,14 @@
 		switch (sym_get_tristate_value(sym)) {
 		case no:
 			if (write_no)
-				fprintf(out, "# %s%s is not set\n",
-				    CONFIG_, sym->name);
+				fprintf(out, "# %s is not set\n",
+				    sym->name);
 			break;
 		case mod:
-			fprintf(out, "%s%s=m\n", CONFIG_, sym->name);
+			fprintf(out, "%s=m\n", sym->name);
 			break;
 		case yes:
-			fprintf(out, "%s%s=y\n", CONFIG_, sym->name);
+			fprintf(out, "%s=y\n", sym->name);
 			break;
 		}
 		break;
@@ -467,7 +468,7 @@
 	case S_HEX:
 	case S_INT:
 		str = sym_get_string_value(sym);
-		fprintf(out, "%s%s=%s\n", CONFIG_, sym->name, str);
+		fprintf(out, "%s=%s\n", sym->name, str);
 		break;
 	case S_OTHER:
 	case S_UNKNOWN:
@@ -830,17 +831,17 @@
 			case no:
 				break;
 			case mod:
-				fprintf(tristate, "%s%s=M\n",
-				    CONFIG_, sym->name);
-				fprintf(out_h, "#define %s%s_MODULE 1\n",
-				    CONFIG_, sym->name);
+				fprintf(tristate, "%s=M\n",
+				    sym->name);
+				fprintf(out_h, "#define %s_MODULE 1\n",
+				    sym->name);
 				break;
 			case yes:
 				if (sym->type == S_TRISTATE)
-					fprintf(tristate,"%s%s=Y\n",
-					    CONFIG_, sym->name);
-				fprintf(out_h, "#define %s%s 1\n",
-				    CONFIG_, sym->name);
+					fprintf(tristate,"%s=Y\n",
+					    sym->name);
+				fprintf(out_h, "#define %s 1\n",
+				    sym->name);
 				break;
 			}
 			break;
@@ -850,14 +851,14 @@
 		case S_HEX:
 			str = sym_get_string_value(sym);
 			if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
-				fprintf(out_h, "#define %s%s 0x%s\n",
-				    CONFIG_, sym->name, str);
+				fprintf(out_h, "#define %s 0x%s\n",
+				    sym->name, str);
 				break;
 			}
 		case S_INT:
 			str = sym_get_string_value(sym);
-			fprintf(out_h, "#define %s%s %s\n",
-			    CONFIG_, sym->name, str);
+			fprintf(out_h, "#define %s %s\n",
+			    sym->name, str);
 			break;
 		default:
 			break;
Index: kconfig/lkc.h
===================================================================
--- kconfig.orig/lkc.h
+++ kconfig/lkc.h
@@ -42,7 +42,7 @@
 #define N_(text) (text)
 
 #ifndef CONFIG_
-#define CONFIG_ "CONFIG_"
+#define CONFIG_ "BR2_"
 #endif
 
 #define TF_COMMAND	0x0001
Index: kconfig/menu.c
===================================================================
--- kconfig.orig/menu.c
+++ kconfig/menu.c
@@ -597,7 +597,7 @@
 
 	if (menu_has_help(menu)) {
 		if (sym->name) {
-			str_printf(help, "%s%s:\n\n", CONFIG_, sym->name);
+			str_printf(help, "%s:\n\n", sym->name);
 			str_append(help, _(menu_get_help(menu)));
 			str_append(help, "\n");
 		}
