X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Flibcore%2Flc_opts.c;h=f9b84b7b066e048360f0042fc055048fd9f2afb8;hb=04906225f6fe1bc22f73b5d6a98eb9c0992a9b54;hp=20f24455755d16aba3cc34c2a5cd76a00943e072;hpb=0fbcef83aa6060534172bb13e71cdadb04428806;p=libfirm diff --git a/ir/libcore/lc_opts.c b/ir/libcore/lc_opts.c index 20f244557..f9b84b7b0 100644 --- a/ir/libcore/lc_opts.c +++ b/ir/libcore/lc_opts.c @@ -131,7 +131,7 @@ static lc_opt_entry_t *init_grp(lc_opt_entry_t *ent, lc_opt_err_info_t *err) set_error(err, lc_opt_err_none, ""); if(ent->parent) { if(ent->parent->is_grp) - list_add(&ent->list, &lc_get_grp_special(ent->parent)->grps); + list_add_tail(&ent->list, &lc_get_grp_special(ent->parent)->grps); else set_error(err, lc_opt_err_grp_expected, ent->parent->name); } @@ -151,7 +151,7 @@ static lc_opt_entry_t *init_opt(lc_opt_entry_t *ent, ent->is_grp = 0; set_error(err, lc_opt_err_none, ""); - list_add(&ent->list, &lc_get_grp_special(ent->parent)->opts); + list_add_tail(&ent->list, &lc_get_grp_special(ent->parent)->opts); s->type = type; s->value = val; @@ -628,7 +628,7 @@ static void lc_opt_print_help_rec(lc_opt_entry_t *ent, char separator, lc_opt_en lc_grp_special_t *s = lc_get_grp_special(ent); char grp_name[512]; char value[256]; - char values[256]; + char values[512]; lc_opt_entry_t *e; if(!list_empty(&s->opts)) { @@ -708,9 +708,16 @@ void lc_opt_print_tree(lc_opt_entry_t *ent, FILE *f) lc_opt_print_tree_grp_indent(ent, f, 0); } +static int lc_opts_default_error_handler(const char *prefix, const lc_opt_err_info_t *err) +{ + fprintf(stderr, "%s: %s; %s\n", prefix, err->msg, err->arg); + return 0; +} void lc_opt_from_file(const char *filename, FILE *f, lc_opt_error_handler_t *handler) { + if (handler == NULL) + handler = lc_opts_default_error_handler; PMANGLE(in) = f; lc_opt_init_parser(filename, handler); PMANGLE(parse)(); @@ -823,6 +830,9 @@ int lc_opt_from_argv(const lc_opt_entry_t *root, int i; int options_set = 0; + if (handler == NULL) + handler = lc_opts_default_error_handler; + for(i = 0; i < argc; ++i) { options_set |= lc_opt_from_single_arg(root, opt_prefix, argv[i], handler); } @@ -890,13 +900,7 @@ const lc_arg_env_t *lc_opt_get_arg_env(void) return env; } -static int lc_opts_default_error_handler(const char *prefix, const lc_opt_err_info_t *err) -{ - fprintf(stderr, "%s: %s; %s\n", prefix, err->msg, err->arg); - return 0; -} - -void lc_opts_init(const char *ini_name, lc_opt_entry_t *root, const char *arg_prefix, int argc, const char **argv) +void lc_opt_default_configs(const char *ini_name) { FILE *f; char path[MAX_PATH]; @@ -927,7 +931,7 @@ void lc_opts_init(const char *ini_name, lc_opt_entry_t *root, const char *arg_pr snprintf(home_dir_ini_file, sizeof(home_dir_ini_file), ".%src", ini_name); home_dir_ini_file[sizeof(home_dir_ini_file) - 1] = '\0'; } else { - /* FIXME: some error occured */ + /* FIXME: some error occurred */ home_dir_ini_file[0] = '\0'; } } @@ -949,7 +953,4 @@ void lc_opts_init(const char *ini_name, lc_opt_entry_t *root, const char *arg_pr lc_opt_from_file(local_ini_file, f, lc_opts_default_error_handler); fclose(f); } - - /* process arguments from the command line */ - lc_opt_from_argv(root, arg_prefix, argc, argv, lc_opts_default_error_handler); }