X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Flibcore%2Flc_opts.c;h=34deeda15efd8c7d926d6e0f5182cc5eb62904fc;hb=4f8e80463195b1fee6ebbeefb59722faf76134cc;hp=8cd8dae2860f9e58ecc33971888dbe583d1056ff;hpb=ea75e9d38674b468f602a0699fb64b9c01254797;p=libfirm diff --git a/ir/libcore/lc_opts.c b/ir/libcore/lc_opts.c index 8cd8dae28..34deeda15 100644 --- a/ir/libcore/lc_opts.c +++ b/ir/libcore/lc_opts.c @@ -27,9 +27,6 @@ #ifdef _WIN32 #include #endif -#ifdef HAVE_ALLOCA_H -#include -#endif /* Includes to determine user's home directory */ #ifdef _WIN32 @@ -49,7 +46,6 @@ #include "lc_common_t.h" #include "lc_opts_t.h" #include "lc_opts_enum.h" -#include "lc_parser_t.h" #include "hashptr.h" #include "lc_printf.h" #include "xmalloc.h" @@ -58,8 +54,8 @@ #define OPT_DELIM '-' -#define HELP_TEMPL "%-15s %-10s %-45s" -#define HELP_TEMPL_VALS HELP_TEMPL " [%s] (%s)" +#define HELP_TEMPL "%-15s %-10s %-45s" +#define HELP_TEMPL_VALS HELP_TEMPL " [%s] (%s)" static struct obstack obst; @@ -112,9 +108,9 @@ static lc_opt_entry_t *init_entry(lc_opt_entry_t *ent, lc_opt_entry_t *parent, const char *copied_desc; obstack_grow0(&obst, name, strlen(name)); - copied_name = obstack_finish(&obst); + copied_name = (char*)obstack_finish(&obst); obstack_grow0(&obst, desc, strlen(desc)); - copied_desc = obstack_finish(&obst); + copied_desc = (char*)obstack_finish(&obst); memset(ent, 0, sizeof(*ent)); set_name(ent, copied_name); @@ -154,12 +150,12 @@ static lc_opt_entry_t *init_opt(lc_opt_entry_t *ent, set_error(err, lc_opt_err_none, ""); list_add_tail(&ent->list, &lc_get_grp_special(ent->parent)->opts); - s->type = type; - s->value = val; - s->cb = cb; + s->type = type; + s->value = val; + s->cb = cb; s->dump = dump; s->dump_vals = dump_vals; - s->length = length; + s->length = length; return ent; } @@ -213,10 +209,6 @@ const char *lc_opt_get_type_name(const lc_opt_entry_t *ent) return get_type_name(lc_get_opt_special(ent)->type); } - -lc_opt_entry_t *lc_opt_find_grp(const lc_opt_entry_t *grp, const char *name, lc_opt_err_info_t *err); -lc_opt_entry_t *lc_opt_find_opt(const lc_opt_entry_t *grp, const char *name, lc_opt_err_info_t *err); - 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); @@ -315,7 +307,7 @@ static lc_opt_entry_t *resolve_up_to_last_str_rec(lc_opt_entry_t *from, size_t next = strspn(path + end, path_delim); /* copy the part of the path into a buffer */ - char *buf = malloc((end+1) * sizeof(buf[0])); + char *buf = (char*)malloc((end+1) * sizeof(buf[0])); strncpy(buf, path, end); buf[end] = '\0'; @@ -402,7 +394,7 @@ int lc_opt_std_cb(UNUSED(const char *name), lc_opt_type_t type, void *data, size break; case lc_opt_type_string: - strncpy(data, va_arg(args, const char *), length); + strncpy((char*)data, va_arg(args, const char *), length); break; case lc_opt_type_int: @@ -429,14 +421,14 @@ int lc_opt_std_dump(char *buf, size_t n, UNUSED(const char *name), lc_opt_type_t switch (type) { case lc_opt_type_bit: case lc_opt_type_negbit: - res = snprintf(buf, n, "%x", *((int *) data)); + res = snprintf(buf, n, "%x", *((unsigned *) data)); break; case lc_opt_type_boolean: case lc_opt_type_negboolean: res = snprintf(buf, n, "%s", *((int *) data) ? "true" : "false"); break; case lc_opt_type_string: - strncpy(buf, data, n); + strncpy(buf, (const char*)data, n); res = n; break; case lc_opt_type_int: @@ -546,6 +538,8 @@ int lc_opt_occurs(lc_opt_entry_t *opt, const char *value, lc_opt_err_info_t *err if (s->cb(opt->name, s->type, s->value, s->length, value)) error = lc_opt_err_none; break; + case lc_opt_type_invalid: + abort(); } set_error(err, error, value); @@ -572,8 +566,6 @@ static char *lc_opt_values_to_string(char *buf, size_t len, const lc_opt_entry_t return buf; } -static lc_opt_entry_t *resolve_up_to_last_str(lc_opt_entry_t *root, const char *path, const char **last_name); - int lc_opt_add_table(lc_opt_entry_t *root, const lc_opt_table_entry_t *table) { int i, res = 0; @@ -606,7 +598,7 @@ static void lc_opt_print_grp_path_rec(char *buf, size_t len, const lc_opt_entry_ } } - strncat(buf, ent->name, len); + strncat(buf, ent->name, len-1); } static char *lc_opt_print_grp_path(char *buf, size_t len, const lc_opt_entry_t *ent, char separator, lc_opt_entry_t *stop_ent) @@ -715,54 +707,22 @@ static int lc_opts_default_error_handler(const char *prefix, const lc_opt_err_in 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)(); -} - int lc_opt_from_single_arg(const lc_opt_entry_t *root, const char *opt_prefix, const char *arg, lc_opt_error_handler_t *handler) { const lc_opt_entry_t *grp = root; - int n = strlen(arg); - int n_prefix = opt_prefix ? strlen(opt_prefix) : 0; + size_t n = strlen(arg); + size_t n_prefix = opt_prefix ? strlen(opt_prefix) : 0; int error = 0; int ret = 0; lc_opt_err_info_t err; - char *end, *buf, *eqsign; + const char *end, *eqsign; if (n >= n_prefix && strncmp(opt_prefix, arg, n_prefix) == 0) { arg = arg + n_prefix; - /* - * check, if the next character is a @. - * This means, that we want to read options - * from a file. - */ - if (arg[0] == '@') { - size_t n = strcspn(&arg[1], " \t\n"); - char *fname = alloca(n + 1); - FILE *f; - - strncpy(fname, &arg[1], n); - if ((f = fopen(fname, "rt")) != NULL) { - lc_opt_from_file(fname, f, handler); - fclose(f); - set_error(&err, lc_opt_err_none, NULL); - } - - else - set_error(&err, lc_opt_err_file_not_found, arg); - - return !lc_opt_raise_error(&err, handler, "Unable to open file: %s", fname); - } - /* find the next delimiter (the -) and extract the string up to * there. */ end = strchr(arg, OPT_DELIM); @@ -774,7 +734,7 @@ int lc_opt_from_single_arg(const lc_opt_entry_t *root, * Copy the part of the option into the buffer and add the * finalizing zero. */ - buf = obstack_copy0(&obst, arg, end - arg); + char *buf = (char*)obstack_copy0(&obst, arg, end - arg); /* Resolve the group inside the group */ grp = lc_opt_find_grp(grp, buf, &err); @@ -793,6 +753,7 @@ int lc_opt_from_single_arg(const lc_opt_entry_t *root, if (!error) { lc_opt_entry_t *opt; + char *buf; /* * Now, we are at the last option part: @@ -802,7 +763,7 @@ int lc_opt_from_single_arg(const lc_opt_entry_t *root, * later. */ end = strchr(arg, '='); - buf = obstack_copy0(&obst, arg, end ? end - arg : (int) strlen(arg)); + buf = (char*)obstack_copy0(&obst, arg, end ? end - arg : (int) strlen(arg)); opt = lc_opt_find_opt(grp, buf, &err); error = lc_opt_raise_error(&err, handler, ERR_STRING, arg); @@ -850,9 +811,9 @@ static int opt_arg_emit(lc_appendable_t *app, const lc_arg_occ_t *occ, const lc_ { char buf[256]; - lc_opt_entry_t *opt = arg->v_ptr; - const char *s = buf; - size_t res = 0; + lc_opt_entry_t *opt = (lc_opt_entry_t*)arg->v_ptr; + const char *s = buf; + size_t res = 0; switch (occ->conversion) { case 'V': @@ -900,58 +861,3 @@ const lc_arg_env_t *lc_opt_get_arg_env(void) return env; } - -void lc_opt_default_configs(const char *ini_name) -{ - FILE *f; - char path[MAX_PATH]; - char local_ini_file[MAX_PATH]; - char home_dir_ini_file[MAX_PATH]; - - /* .ini */ - strncpy(local_ini_file, ini_name, sizeof(local_ini_file)); - strncat(local_ini_file, ".ini", sizeof(local_ini_file)); - local_ini_file[sizeof(local_ini_file) - 1] = '\0'; - path[0] = '\0'; - -#ifdef _WIN32 -#if _MSC_VER > 1200 - /* ARG: need newer SDK to compile this */ - SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, path); - strncat(path, "\\", sizeof(path)); -#endif - strncpy(home_dir_ini_file, local_ini_file, sizeof(home_dir_ini_file)); - home_dir_ini_file[sizeof(home_dir_ini_file) - 1] = '\0'; -#else - { - struct passwd *entry = getpwuid(getuid()); - if (entry != NULL) { - strcpy(path, entry->pw_dir); - strncat(path, "/", sizeof(path)); - /* .rc */ - 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 occurred */ - home_dir_ini_file[0] = '\0'; - } - } -#endif - - strncat(path, home_dir_ini_file, sizeof(path)); - path[sizeof(path) - 1] = '\0'; - - /* Process ini file in user's home. */ - f = fopen(path, "rt"); - if (f) { - lc_opt_from_file(path, f, lc_opts_default_error_handler); - fclose(f); - } - - /* Process ini file in current directory. */ - f = fopen(local_ini_file, "rt"); - if (f) { - lc_opt_from_file(local_ini_file, f, lc_opts_default_error_handler); - fclose(f); - } -}