X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Flibcore%2Flc_opts.c;h=fc9c16207f5d3345adda05c39dd2fa2c4b5cf333;hb=998a7d33f7fe446db8e265d54138841fcfe018bf;hp=b7b0e3042f1ea1dc18e874492198a60ebb2f2ce3;hpb=85f517eca982e6a4e1d1848eb67634ae33b70de9;p=libfirm diff --git a/ir/libcore/lc_opts.c b/ir/libcore/lc_opts.c index b7b0e3042..fc9c16207 100644 --- a/ir/libcore/lc_opts.c +++ b/ir/libcore/lc_opts.c @@ -1,21 +1,7 @@ /* - libcore: library for basic data structures and algorithms. - Copyright (C) 2005 IPD Goos, Universit"at Karlsruhe, Germany - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ + * This file is part of libFirm. + * Copyright (C) 2012 IPD Goos, Universit"at Karlsruhe, Germany + */ #include "config.h" #include @@ -28,6 +14,7 @@ #include "lc_opts_enum.h" #include "hashptr.h" #include "lc_printf.h" +#include "util.h" #include "xmalloc.h" #include "obst.h" @@ -43,7 +30,7 @@ static struct obstack obst; static void set_name(lc_opt_entry_t *ent, const char *name) { ent->name = name; - ent->hash = HASH_STR(name, strlen(name)); + ent->hash = hash_str(name); } #define entry_matches(ent,hash_val,str) \ @@ -175,8 +162,6 @@ static const char *get_type_name(lc_opt_type_t type) XXX(double); XXX(boolean); XXX(string); - case lc_opt_type_negbit: res = "bit"; break; - case lc_opt_type_negboolean: res = "boolean"; break; default: res = ""; } @@ -231,9 +216,9 @@ lc_opt_entry_t *lc_opt_add_opt(lc_opt_entry_t *parent, static lc_opt_entry_t *lc_opt_find_ent(const struct list_head *head, const char *name, int error_to_use, lc_opt_err_info_t *err) { - lc_opt_entry_t *ent, *found = NULL; + lc_opt_entry_t *found = NULL; int error = error_to_use; - unsigned hash = HASH_STR(name, strlen(name)); + unsigned hash = hash_str(name); if (!list_empty(head)) { list_for_each_entry(lc_opt_entry_t, ent, head, list) { @@ -335,7 +320,7 @@ static char *strtolower(char *buf, size_t n, const char *str) { unsigned i; for (i = 0; i < n; ++i) - buf[i] = tolower(str[i]); + buf[i] = tolower((unsigned char)str[i]); return buf; } @@ -354,27 +339,15 @@ int lc_opt_std_cb(const char *name, lc_opt_type_t type, void *data, size_t lengt case lc_opt_type_bit: integer = va_arg(args, int); if (integer) - *((int *) data) |= length; + *(unsigned*)data |= length; else - *((int *) data) &= ~length; - break; - - case lc_opt_type_negbit: - integer = va_arg(args, int); - if (integer) - *((int *) data) &= ~length; - else - *((int *) data) |= length; + *(unsigned*)data &= ~length; break; case lc_opt_type_boolean: *((int *) data) = va_arg(args, int); break; - case lc_opt_type_negboolean: - *((int *) data) = !va_arg(args, int); - break; - case lc_opt_type_string: strncpy((char*)data, va_arg(args, const char *), length); break; @@ -404,11 +377,9 @@ int lc_opt_std_dump(char *buf, size_t n, const char *name, lc_opt_type_t type, v if (data) { switch (type) { case lc_opt_type_bit: - case lc_opt_type_negbit: 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: @@ -500,11 +471,9 @@ int lc_opt_occurs(lc_opt_entry_t *opt, const char *value, lc_opt_err_info_t *err break; case lc_opt_type_boolean: - case lc_opt_type_negboolean: case lc_opt_type_bit: - case lc_opt_type_negbit: strtolower(buf, sizeof(buf), value); - for (i = 0; i < LC_ARRSIZE(bool_strings); ++i) { + for (i = 0; i < ARRAY_SIZE(bool_strings); ++i) { if (strcmp(buf, bool_strings[i].str) == 0) { val->integer = bool_strings[i].val; error = lc_opt_err_none; @@ -610,7 +579,6 @@ static void lc_opt_print_help_rec(lc_opt_entry_t *ent, char separator, lc_opt_en char grp_name[512]; char value[256]; char values[512]; - lc_opt_entry_t *e; if (!list_empty(&s->opts)) { lc_opt_print_grp_path(grp_name, sizeof(grp_name), ent, separator, stop_ent); @@ -668,8 +636,6 @@ static void lc_opt_print_tree_grp_indent(lc_opt_entry_t *ent, FILE *f, int level lc_grp_special_t *s; if (ent->is_grp) { - lc_opt_entry_t *e; - s = lc_get_grp_special(ent); indent(f, level); fprintf(f, "/%s\n", ent->name); @@ -701,14 +667,14 @@ int lc_opt_from_single_arg(const lc_opt_entry_t *root, { const lc_opt_entry_t *grp = root; size_t n = strlen(arg); - size_t n_prefix = opt_prefix ? strlen(opt_prefix) : 0; + size_t n_prefix = opt_prefix != NULL ? strlen(opt_prefix) : 0; int error = 0; int ret = 0; lc_opt_err_info_t err; const char *end, *eqsign; - if (n >= n_prefix && strncmp(opt_prefix, arg, n_prefix) == 0) { + if (n >= n_prefix && (n_prefix == 0 || strncmp(opt_prefix, arg, n_prefix) == 0)) { arg = arg + n_prefix; /* find the next delimiter (the -) and extract the string up to