diff options
-rw-r--r-- | extra/config/Kconfig-language.txt | 4 | ||||
-rw-r--r-- | extra/config/conf.c | 41 | ||||
-rw-r--r-- | extra/config/confdata.c | 2 |
3 files changed, 32 insertions, 15 deletions
diff --git a/extra/config/Kconfig-language.txt b/extra/config/Kconfig-language.txt index 371dc92a4..da51c0e7c 100644 --- a/extra/config/Kconfig-language.txt +++ b/extra/config/Kconfig-language.txt @@ -141,8 +141,8 @@ Expressions are listed in decreasing order of precedence. otherwise 'y'. (4) Returns the value of the expression. Used to override precedence. (5) Returns the result of (2-/expr/). -(6) Returns the result of max(/expr/, /expr/). -(7) Returns the result of min(/expr/, /expr/). +(6) Returns the result of min(/expr/, /expr/). +(7) Returns the result of max(/expr/, /expr/). An expression can have a value of 'n', 'm' or 'y' (or 0, 1, 2 respectively for calculations). A menu entry becomes visible when it's diff --git a/extra/config/conf.c b/extra/config/conf.c index 20ea2c901..7cf6bd7df 100644 --- a/extra/config/conf.c +++ b/extra/config/conf.c @@ -26,6 +26,7 @@ enum { set_no, set_random } input_mode = ask_all; +char *defconfig_file; static int indent = 1; static int valid_stdin = 1; @@ -174,7 +175,7 @@ int conf_string(struct menu *menu) break; case '?': /* print help */ - if (line[1] == 0) { + if (line[1] == '\n') { help = nohelp_text; if (menu->sym->help) help = menu->sym->help; @@ -483,11 +484,12 @@ static void check_conf(struct menu *menu) int main(int ac, char **av) { + int i = 1; const char *name; struct stat tmpstat; - if (ac > 1 && av[1][0] == '-') { - switch (av[1][1]) { + if (ac > i && av[i][0] == '-') { + switch (av[i++][1]) { case 'o': input_mode = ask_new; break; @@ -498,6 +500,15 @@ int main(int ac, char **av) case 'd': input_mode = set_default; break; + case 'D': + input_mode = set_default; + defconfig_file = av[i++]; + if (!defconfig_file) { + printf("%s: No default config file specified\n", + av[0]); + exit(1); + } + break; case 'n': input_mode = set_no; break; @@ -516,18 +527,21 @@ int main(int ac, char **av) printf("%s [-o|-s] config\n", av[0]); exit(0); } - name = av[2]; - } else - name = av[1]; + } + name = av[i]; + if (!name) { + printf("%s: configuration file missing\n", av[0]); + } conf_parse(name); //zconfdump(stdout); switch (input_mode) { case set_default: - name = conf_get_default_confname(); - if (conf_read(name)) { + if (!defconfig_file) + defconfig_file = conf_get_default_confname(); + if (conf_read(defconfig_file)) { printf("***\n" "*** Can't find default configuration \"%s\"!\n" - "***\n", name); + "***\n", defconfig_file); exit(1); } break; @@ -536,8 +550,8 @@ int main(int ac, char **av) printf("***\n" "*** You have not yet configured uClibc!\n" "***\n" - "*** Please run some configurator (e.g. \"make config\" or\n" - "*** \"make oldconfig\" or \"make menuconfig\").\n" + "*** Please run some configurator (e.g. \"make oldconfig\" or\n" + "*** \"make menuconfig\" or \"make config\").\n" "***\n"); exit(1); } @@ -561,6 +575,9 @@ int main(int ac, char **av) conf_cnt = 0; check_conf(&rootmenu); } while (conf_cnt); - conf_write(NULL); + if (conf_write(NULL)) { + fprintf(stderr, "\n*** Error during writing of the uClibc configuration.\n\n"); + return 1; + } return 0; } diff --git a/extra/config/confdata.c b/extra/config/confdata.c index d0c810dc4..4b4d150c7 100644 --- a/extra/config/confdata.c +++ b/extra/config/confdata.c @@ -52,7 +52,7 @@ static char *conf_expand_value(const char *in) char *conf_get_default_confname(void) { struct stat buf; - static char fullname[4096+1]; + static char fullname[PATH_MAX+1]; char *env, *name; name = conf_expand_value(conf_defname); |