*/
int str_to_decimal(const char *str, long long *val, int kilo)
{
- int len;
+ int len, base;
len = strlen(str);
if (!len)
return 1;
- *val = strtoll(str, NULL, 10);
+ if (strstr(str, "0x") || strstr(str, "0X"))
+ base = 16;
+ else
+ base = 10;
+
+ *val = strtoll(str, NULL, base);
if (*val == LONG_MAX && errno == ERANGE)
return 1;
void strip_blank_end(char *p)
{
- char *s;
+ char *start = p, *s;
s = strchr(p, ';');
if (s)
p = s;
s = p + strlen(p);
- while ((isspace(*s) || iscntrl(*s)) && (s > p))
+ while ((isspace(*s) || iscntrl(*s)) && (s > start))
s--;
*(s + 1) = '\0';
dprint(FD_PARSE, "__handle_option=%s, type=%d, ptr=%s\n", o->name,
o->type, ptr);
- if (!ptr && o->type != FIO_OPT_STR_SET) {
+ if (!ptr && o->type != FIO_OPT_STR_SET && o->type != FIO_OPT_STR) {
fprintf(stderr, "Option %s requires an argument\n", o->name);
return 1;
}
*ret = '\0';
ret = (char *) opt;
(*post)++;
+ strip_blank_end(ret);
o = find_option(options, ret);
} else {
o = find_option(options, opt);
o = find_option(options, opt);
if (!o) {
- fprintf(stderr, "Bad option %s\n", opt);
+ fprintf(stderr, "Bad option <%s>\n", opt);
return 1;
}
o = get_option(tmp, options, &post);
if (!o) {
- fprintf(stderr, "Bad option %s\n", tmp);
+ fprintf(stderr, "Bad option <%s>\n", tmp);
free(tmp);
return 1;
}