X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Flibcore%2Flc_opts.c;h=85b7dcce7aafa5029581f36f37b698647c2baf92;hb=b1bf2c39dbf3895ea8c69550adb453ee907f5278;hp=8d0868df4b963e596bcb736794b7bb4d5040c634;hpb=3c46154212ea5a471c545127a40b7532daab32b4;p=libfirm diff --git a/ir/libcore/lc_opts.c b/ir/libcore/lc_opts.c index 8d0868df4..85b7dcce7 100644 --- a/ir/libcore/lc_opts.c +++ b/ir/libcore/lc_opts.c @@ -16,17 +16,18 @@ License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "config.h" #include #include +#include #include #include -#if defined(__FreeBSD__) -#include -#elif defined(_WIN32) +#ifdef _WIN32 #include -#else +#endif +#ifdef HAVE_ALLOCA_H #include #endif @@ -51,6 +52,7 @@ #include "lc_parser_t.h" #include "hashptr.h" #include "lc_printf.h" +#include "xmalloc.h" #define ERR_STRING "In argument \"%s\": " @@ -130,7 +132,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); } @@ -150,7 +152,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; @@ -220,7 +222,7 @@ lc_opt_entry_t *lc_opt_get_grp(lc_opt_entry_t *parent, const char *name) lc_opt_entry_t *ent = lc_opt_find_grp(parent, name, NULL); if(!ent) { - ent = obstack_alloc(&obst, sizeof(*ent)); + ent = OALLOC(&obst, lc_opt_entry_t); init_entry(ent, parent, name, ""); init_grp(ent, NULL); } @@ -241,7 +243,7 @@ lc_opt_entry_t *lc_opt_add_opt(lc_opt_entry_t *parent, lc_opt_entry_t *ent = lc_opt_find_opt(parent, name, NULL); if(!ent) { - res = obstack_alloc(&obst, sizeof(*ent)); + res = OALLOC(&obst, lc_opt_entry_t); init_entry(res, parent, name, desc); init_opt(res, type, value, length, cb, dump, dump_vals, err); } else @@ -627,7 +629,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)) { @@ -707,9 +709,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)(); @@ -822,6 +831,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); } @@ -889,13 +901,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]; @@ -926,7 +932,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'; } } @@ -948,7 +954,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); }