summaryrefslogtreecommitdiff
path: root/scripts/kconfig/confdata.c
Unidiff
Diffstat (limited to 'scripts/kconfig/confdata.c') (more/less context) (show whitespace changes)
-rw-r--r--scripts/kconfig/confdata.c66
1 files changed, 42 insertions, 24 deletions
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 0f5fd97..9bf7af9 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -5,4 +5,4 @@
5 5
6#include <sys/stat.h>
6#include <ctype.h> 7#include <ctype.h>
7#include <limits.h>
8#include <stdio.h> 8#include <stdio.h>
@@ -16,3 +16,2 @@
16const char conf_def_filename[] = ".config"; 16const char conf_def_filename[] = ".config";
17char conf_filename[PATH_MAX+1];
18 17
@@ -57,3 +56,14 @@ char *conf_get_default_confname(void)
57{ 56{
58 return conf_expand_value(conf_defname); 57 struct stat buf;
58 static char fullname[PATH_MAX+1];
59 char *env, *name;
60
61 name = conf_expand_value(conf_defname);
62 env = getenv(SRCTREE);
63 if (env) {
64 sprintf(fullname, "%s/%s", env, name);
65 if (!stat(fullname, &buf))
66 return fullname;
67 }
68 return name;
59} 69}
@@ -63,3 +73,3 @@ int conf_read(const char *name)
63 FILE *in = NULL; 73 FILE *in = NULL;
64 char line[128]; 74 char line[1024];
65 char *p, *p2; 75 char *p, *p2;
@@ -72,5 +82,3 @@ int conf_read(const char *name)
72 if (name) { 82 if (name) {
73 in = fopen(name, "r"); 83 in = zconf_fopen(name);
74 if (in)
75 strcpy(conf_filename, name);
76 } else { 84 } else {
@@ -79,3 +87,3 @@ int conf_read(const char *name)
79 name = conf_expand_value(name); 87 name = conf_expand_value(name);
80 in = fopen(name, "r"); 88 in = zconf_fopen(name);
81 if (in) { 89 if (in) {
@@ -93,3 +101,4 @@ int conf_read(const char *name)
93 for_all_symbols(i, sym) { 101 for_all_symbols(i, sym) {
94 sym->flags |= SYMBOL_NEW; 102 sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED;
103 sym->flags &= ~SYMBOL_VALID;
95 switch (sym->type) { 104 switch (sym->type) {
@@ -98,8 +107,7 @@ int conf_read(const char *name)
98 case S_STRING: 107 case S_STRING:
99 if (S_VAL(sym->def)) { 108 if (S_VAL(sym->def))
100 free(S_VAL(sym->def)); 109 free(S_VAL(sym->def));
101 S_VAL(sym->def) = NULL;
102 }
103 default: 110 default:
104 ; 111 S_VAL(sym->def) = NULL;
112 S_TRI(sym->def) = no;
105 } 113 }
@@ -107,3 +115,3 @@ int conf_read(const char *name)
107 115
108 while (fgets(line, 128, in)) { 116 while (fgets(line, sizeof(line), in)) {
109 lineno++; 117 lineno++;
@@ -119,3 +127,2 @@ int conf_read(const char *name)
119 continue; 127 continue;
120 //printf("%s -> n\n", line + 9);
121 sym = sym_lookup(line + 9, 0); 128 sym = sym_lookup(line + 9, 0);
@@ -141,3 +148,2 @@ int conf_read(const char *name)
141 *p2 = 0; 148 *p2 = 0;
142 //printf("%s -> %s\n", line + 7, p);
143 sym = sym_find(line + 7); 149 sym = sym_find(line + 7);
@@ -148,13 +154,20 @@ int conf_read(const char *name)
148 switch (sym->type) { 154 switch (sym->type) {
155 case S_TRISTATE:
156 if (p[0] == 'm') {
157 S_TRI(sym->def) = mod;
158 sym->flags &= ~SYMBOL_NEW;
159 break;
160 }
149 case S_BOOLEAN: 161 case S_BOOLEAN:
150 sym->def = symbol_yes.curr; 162 if (p[0] == 'y') {
163 S_TRI(sym->def) = yes;
151 sym->flags &= ~SYMBOL_NEW; 164 sym->flags &= ~SYMBOL_NEW;
152 break; 165 break;
153 case S_TRISTATE: 166 }
154 if (p[0] == 'm') 167 if (p[0] == 'n') {
155 sym->def = symbol_mod.curr; 168 S_TRI(sym->def) = no;
156 else
157 sym->def = symbol_yes.curr;
158 sym->flags &= ~SYMBOL_NEW; 169 sym->flags &= ~SYMBOL_NEW;
159 break; 170 break;
171 }
172 break;
160 case S_STRING: 173 case S_STRING:
@@ -169,2 +182,6 @@ int conf_read(const char *name)
169 } 182 }
183 if (!p2) {
184 fprintf(stderr, "%s:%d: invalid string found\n", name, lineno);
185 exit(1);
186 }
170 case S_INT: 187 case S_INT:
@@ -174,4 +191,6 @@ int conf_read(const char *name)
174 sym->flags &= ~SYMBOL_NEW; 191 sym->flags &= ~SYMBOL_NEW;
175 } else 192 } else {
176 fprintf(stderr, "%s:%d:symbol value '%s' invalid for %s\n", name, lineno, p, sym->name); 193 fprintf(stderr, "%s:%d:symbol value '%s' invalid for %s\n", name, lineno, p, sym->name);
194 exit(1);
195 }
177 break; 196 break;
@@ -354,3 +373,2 @@ int conf_write(const char *name)
354 return 1; 373 return 1;
355 strcpy(conf_filename, name);
356 374