|
|
|
@ -14,6 +14,8 @@ |
|
|
|
|
#define LKC_DIRECT_LINK |
|
|
|
|
#include "lkc.h" |
|
|
|
|
|
|
|
|
|
#define LOCAL_BUILD_SETTINGS "/.openwrt/defconfig" |
|
|
|
|
|
|
|
|
|
static void conf_warning(const char *fmt, ...) |
|
|
|
|
__attribute__ ((format (printf, 1, 2))); |
|
|
|
|
|
|
|
|
@ -87,7 +89,7 @@ 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)) |
|
|
|
@ -104,55 +106,12 @@ void conf_reset(void) |
|
|
|
|
sym->user.tri = no; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
conf_read_simple(NULL, 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int conf_read_simple(const char *name) |
|
|
|
|
{ |
|
|
|
|
FILE *in = NULL; |
|
|
|
|
int conf_read_file(FILE *in, struct symbol *sym){ |
|
|
|
|
char line[1024]; |
|
|
|
|
char *p, *p2; |
|
|
|
|
struct symbol *sym; |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
if (name) { |
|
|
|
|
in = zconf_fopen(name); |
|
|
|
|
} else { |
|
|
|
|
const char **names = conf_confnames; |
|
|
|
|
while ((name = *names++)) { |
|
|
|
|
name = conf_expand_value(name); |
|
|
|
|
in = zconf_fopen(name); |
|
|
|
|
if (in) { |
|
|
|
|
printf(_("#\n" |
|
|
|
|
"# using defaults found in %s\n" |
|
|
|
|
"#\n"), name); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!in) |
|
|
|
|
return 1; |
|
|
|
|
|
|
|
|
|
conf_filename = name; |
|
|
|
|
conf_lineno = 0; |
|
|
|
|
conf_warnings = 0; |
|
|
|
|
conf_unsaved = 0; |
|
|
|
|
|
|
|
|
|
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; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
while (fgets(line, sizeof(line), in)) { |
|
|
|
|
conf_lineno++; |
|
|
|
@ -169,12 +128,12 @@ int conf_read_simple(const char *name) |
|
|
|
|
continue; |
|
|
|
|
sym = sym_find(line + 9); |
|
|
|
|
if (!sym) { |
|
|
|
|
conf_warning("trying to assign nonexistent symbol %s", line + 9); |
|
|
|
|
//conf_warning("trying to assign nonexistent symbol %s", line + 9);
|
|
|
|
|
break; |
|
|
|
|
} else if (!(sym->flags & SYMBOL_NEW)) { |
|
|
|
|
conf_warning("trying to reassign symbol %s", sym->name); |
|
|
|
|
} /*else if (!(sym->flags & SYMBOL_NEW)) {
|
|
|
|
|
//conf_warning("trying to reassign symbol %s", sym->name);
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
}*/ |
|
|
|
|
switch (sym->type) { |
|
|
|
|
case S_BOOLEAN: |
|
|
|
|
case S_TRISTATE: |
|
|
|
@ -199,12 +158,12 @@ int conf_read_simple(const char *name) |
|
|
|
|
*p2 = 0; |
|
|
|
|
sym = sym_find(line + 7); |
|
|
|
|
if (!sym) { |
|
|
|
|
conf_warning("trying to assign nonexistent symbol %s", line + 7); |
|
|
|
|
//conf_warning("trying to assign nonexistent symbol %s", line + 7);
|
|
|
|
|
break; |
|
|
|
|
} else if (!(sym->flags & SYMBOL_NEW)) { |
|
|
|
|
} /*else if (!(sym->flags & SYMBOL_NEW)) {
|
|
|
|
|
conf_warning("trying to reassign symbol %s", sym->name); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
}*/ |
|
|
|
|
switch (sym->type) { |
|
|
|
|
case S_TRISTATE: |
|
|
|
|
if (p[0] == 'm') { |
|
|
|
@ -283,9 +242,80 @@ int conf_read_simple(const char *name) |
|
|
|
|
} |
|
|
|
|
fclose(in); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int conf_read_simple(const char *name, int load_config) |
|
|
|
|
{ |
|
|
|
|
FILE *in = NULL; |
|
|
|
|
FILE *defaults = NULL; |
|
|
|
|
struct symbol *sym; |
|
|
|
|
int i; |
|
|
|
|
char *home_dir = getenv("HOME"); |
|
|
|
|
char *default_config_path = NULL; |
|
|
|
|
|
|
|
|
|
if(home_dir){ |
|
|
|
|
default_config_path = malloc(strlen(home_dir) + sizeof(LOCAL_BUILD_SETTINGS) + 1); |
|
|
|
|
sprintf(default_config_path, "%s%s", home_dir, LOCAL_BUILD_SETTINGS); |
|
|
|
|
defaults = zconf_fopen(default_config_path); |
|
|
|
|
if(defaults) |
|
|
|
|
printf("# using buildsystem predefines from %s\n", default_config_path); |
|
|
|
|
free(default_config_path); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(load_config){ |
|
|
|
|
if (name) { |
|
|
|
|
in = zconf_fopen(name); |
|
|
|
|
} else { |
|
|
|
|
const char **names = conf_confnames; |
|
|
|
|
while ((name = *names++)) { |
|
|
|
|
name = conf_expand_value(name); |
|
|
|
|
in = zconf_fopen(name); |
|
|
|
|
if (in) { |
|
|
|
|
printf(_("#\n" |
|
|
|
|
"# using defaults found in %s\n" |
|
|
|
|
"#\n"), name); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!in && !defaults) |
|
|
|
|
return 1; |
|
|
|
|
|
|
|
|
|
conf_filename = name; |
|
|
|
|
conf_lineno = 0; |
|
|
|
|
conf_warnings = 0; |
|
|
|
|
conf_unsaved = 0; |
|
|
|
|
|
|
|
|
|
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; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(defaults) |
|
|
|
|
conf_read_file(defaults, sym); |
|
|
|
|
|
|
|
|
|
if(in) |
|
|
|
|
conf_read_file(in, sym); |
|
|
|
|
|
|
|
|
|
if (modules_sym) |
|
|
|
|
sym_calc_value(modules_sym); |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int conf_read(const char *name) |
|
|
|
@ -295,7 +325,7 @@ int conf_read(const char *name) |
|
|
|
|
struct expr *e; |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
if (conf_read_simple(name)) |
|
|
|
|
if (conf_read_simple(name, 1)) |
|
|
|
|
return 1; |
|
|
|
|
|
|
|
|
|
for_all_symbols(i, sym) { |
|
|
|
|