/*
- 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 <stdio.h>
#include <string.h>
#include <ctype.h>
-#ifdef _WIN32
-#include <malloc.h>
-#endif
-
-/* Includes to determine user's home directory */
-#ifdef _WIN32
-#include <shlobj.h>
-#else
-#include <sys/types.h>
-#include <unistd.h>
-#include <pwd.h>
-#endif
-
-/* maximum length of a path. */
-#ifndef MAX_PATH
-#define MAX_PATH 2048
-#endif
-
-
-#include "lc_common_t.h"
#include "lc_opts_t.h"
#include "lc_opts_enum.h"
#include "hashptr.h"
#include "lc_printf.h"
+#include "util.h"
#include "xmalloc.h"
+#include "obst.h"
#define ERR_STRING "In argument \"%s\": "
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) \
XXX(double);
XXX(boolean);
XXX(string);
- case lc_opt_type_negbit: res = "bit"; break;
- case lc_opt_type_negboolean: res = "boolean"; break;
default:
res = "<none>";
}
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) {
{
unsigned i;
for (i = 0; i < n; ++i)
- buf[i] = tolower(str[i]);
+ buf[i] = tolower((unsigned char)str[i]);
return buf;
}
-int lc_opt_std_cb(UNUSED(const char *name), lc_opt_type_t type, void *data, size_t length, ...)
+int lc_opt_std_cb(const char *name, lc_opt_type_t type, void *data, size_t length, ...)
{
va_list args;
int res = 0;
int integer;
+ (void) name;
va_start(args, length);
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;
return res;
}
-int lc_opt_std_dump(char *buf, size_t n, UNUSED(const char *name), lc_opt_type_t type, void *data, UNUSED(size_t length))
+int lc_opt_std_dump(char *buf, size_t n, const char *name, lc_opt_type_t type, void *data, size_t length)
{
int res;
+ (void) name;
+ (void) length;
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:
return res;
}
-int lc_opt_bool_dump_vals(char *buf, size_t n, UNUSED(const char *name), UNUSED(lc_opt_type_t type), UNUSED(void *data), UNUSED(size_t length))
+int lc_opt_bool_dump_vals(char *buf, size_t n, const char *name, lc_opt_type_t type, void *data, size_t length)
{
+ (void) name;
+ (void) type;
+ (void) data;
+ (void) length;
strncpy(buf, "true, false", n);
return n;
}
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;
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);
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);
{
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
return options_set;
}
-static int opt_arg_type(UNUSED(const lc_arg_occ_t *occ))
+static int opt_arg_type(const lc_arg_occ_t *occ)
{
+ (void) occ;
return lc_arg_type_ptr;
}