projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
log: needs stdarg include for va_list
[fio.git]
/
parse.c
diff --git
a/parse.c
b/parse.c
index 55de4f0b8fa3643703294e640c39ee5b32819ae8..70cfa0b07a46c05f665f68c53659f776c6fa98bd 100644
(file)
--- a/
parse.c
+++ b/
parse.c
@@
-44,24
+44,25
@@
static void posval_sort(struct fio_option *o, struct value_pair *vpmap)
qsort(vpmap, entries, sizeof(struct value_pair), vp_cmp);
}
qsort(vpmap, entries, sizeof(struct value_pair), vp_cmp);
}
-static void show_option_range(struct fio_option *o, FILE *out)
+static void show_option_range(struct fio_option *o,
+ int (*logger)(const char *format, ...))
{
if (o->type == FIO_OPT_FLOAT_LIST){
if (isnan(o->minfp) && isnan(o->maxfp))
return;
{
if (o->type == FIO_OPT_FLOAT_LIST){
if (isnan(o->minfp) && isnan(o->maxfp))
return;
-
fprintf(out,
"%20s: min=%f", "range", o->minfp);
+
logger(
"%20s: min=%f", "range", o->minfp);
if (!isnan(o->maxfp))
if (!isnan(o->maxfp))
-
fprintf(out,
", max=%f", o->maxfp);
-
fprintf(out,
"\n");
+
logger(
", max=%f", o->maxfp);
+
logger(
"\n");
} else {
if (!o->minval && !o->maxval)
return;
} else {
if (!o->minval && !o->maxval)
return;
-
fprintf(out,
"%20s: min=%d", "range", o->minval);
+
logger(
"%20s: min=%d", "range", o->minval);
if (o->maxval)
if (o->maxval)
-
fprintf(out,
", max=%d", o->maxval);
-
fprintf(out,
"\n");
+
logger(
", max=%d", o->maxval);
+
logger(
"\n");
}
}
}
}
@@
-75,17
+76,17
@@
static void show_option_values(struct fio_option *o)
if (!vp->ival)
continue;
if (!vp->ival)
continue;
-
printf
("%20s: %-10s", i == 0 ? "valid values" : "", vp->ival);
+
log_info
("%20s: %-10s", i == 0 ? "valid values" : "", vp->ival);
if (vp->help)
if (vp->help)
-
printf
(" %s", vp->help);
-
printf
("\n");
+
log_info
(" %s", vp->help);
+
log_info
("\n");
}
if (i)
}
if (i)
-
printf
("\n");
+
log_info
("\n");
}
}
-static void show_option_help(struct fio_option *o,
FILE *out
)
+static void show_option_help(struct fio_option *o,
int is_err
)
{
const char *typehelp[] = {
"invalid",
{
const char *typehelp[] = {
"invalid",
@@
-101,15
+102,21
@@
static void show_option_help(struct fio_option *o, FILE *out)
"no argument (opt)",
"deprecated",
};
"no argument (opt)",
"deprecated",
};
+ int (*logger)(const char *format, ...);
+
+ if (is_err)
+ logger = log_err;
+ else
+ logger = log_info;
if (o->alias)
if (o->alias)
-
fprintf(out,
"%20s: %s\n", "alias", o->alias);
+
logger(
"%20s: %s\n", "alias", o->alias);
-
fprintf(out,
"%20s: %s\n", "type", typehelp[o->type]);
-
fprintf(out,
"%20s: %s\n", "default", o->def ? o->def : "no default");
+
logger(
"%20s: %s\n", "type", typehelp[o->type]);
+
logger(
"%20s: %s\n", "default", o->def ? o->def : "no default");
if (o->prof_name)
if (o->prof_name)
-
fprintf(out,
"%20s: only for profile '%s'\n", "valid", o->prof_name);
- show_option_range(o,
stdout
);
+
logger(
"%20s: only for profile '%s'\n", "valid", o->prof_name);
+ show_option_range(o,
logger
);
show_option_values(o);
}
show_option_values(o);
}
@@
-184,9
+191,10
@@
static unsigned long long __get_mult_bytes(const char *p, void *data,
}
static unsigned long long get_mult_bytes(const char *str, int len, void *data,
}
static unsigned long long get_mult_bytes(const char *str, int len, void *data,
- int *percent
, int is_range
)
+ int *percent)
{
const char *p = str;
{
const char *p = str;
+ int digit_seen = 0;
if (len < 2)
return __get_mult_bytes(str, data, percent);
if (len < 2)
return __get_mult_bytes(str, data, percent);
@@
-195,10
+203,10
@@
static unsigned long long get_mult_bytes(const char *str, int len, void *data,
* Go forward until we hit a non-digit, or +/- sign
*/
while ((p - str) <= len) {
* Go forward until we hit a non-digit, or +/- sign
*/
while ((p - str) <= len) {
- if (!isdigit((int) *p) && (*p != '+'))
- break;
- if (!is_range && (*p != '-'))
+ if (!isdigit((int) *p) &&
+ (((*p != '+') && (*p != '-')) || digit_seen))
break;
break;
+ digit_seen |= isdigit((int) *p);
p++;
}
p++;
}
@@
-219,7
+227,7
@@
int str_to_float(const char *str, double *val)
/*
* convert string into decimal value, noting any size suffix
*/
/*
* convert string into decimal value, noting any size suffix
*/
-int str_to_decimal(const char *str, long long *val, int kilo,
int is_range,
void *data)
+int str_to_decimal(const char *str, long long *val, int kilo, void *data)
{
int len, base;
{
int len, base;
@@
-240,7
+248,7
@@
int str_to_decimal(const char *str, long long *val, int kilo, int is_range, void
unsigned long long mult;
int perc = 0;
unsigned long long mult;
int perc = 0;
- mult = get_mult_bytes(str, len, data, &perc
, is_range
);
+ mult = get_mult_bytes(str, len, data, &perc);
if (perc)
*val = -1ULL - *val;
else
if (perc)
*val = -1ULL - *val;
else
@@
-251,14
+259,14
@@
int str_to_decimal(const char *str, long long *val, int kilo, int is_range, void
return 0;
}
return 0;
}
-static int check_str_bytes(const char *p, long long *val,
int is_range,
void *data)
+static int check_str_bytes(const char *p, long long *val, void *data)
{
{
- return str_to_decimal(p, val, 1,
is_range,
data);
+ return str_to_decimal(p, val, 1, data);
}
static int check_str_time(const char *p, long long *val)
{
}
static int check_str_time(const char *p, long long *val)
{
- return str_to_decimal(p, val, 0,
0,
NULL);
+ return str_to_decimal(p, val, 0, NULL);
}
void strip_blank_front(char **p)
}
void strip_blank_front(char **p)
@@
-295,7
+303,7
@@
static int check_range_bytes(const char *str, long *val, void *data)
{
long long __val;
{
long long __val;
- if (!str_to_decimal(str, &__val, 1,
1,
data)) {
+ if (!str_to_decimal(str, &__val, 1, data)) {
*val = __val;
return 0;
}
*val = __val;
return 0;
}
@@
-404,7
+412,7
@@
static int __handle_option(struct fio_option *o, const char *ptr, void *data,
if (is_time)
ret = check_str_time(ptr, &ull);
else
if (is_time)
ret = check_str_time(ptr, &ull);
else
- ret = check_str_bytes(ptr, &ull,
0,
data);
+ ret = check_str_bytes(ptr, &ull, data);
if (ret)
break;
if (ret)
break;
@@
-634,10
+642,10
@@
match:
break;
}
case FIO_OPT_DEPRECATED:
break;
}
case FIO_OPT_DEPRECATED:
-
fprintf(stdout,
"Option %s is deprecated\n", o->name);
+
log_info(
"Option %s is deprecated\n", o->name);
break;
default:
break;
default:
-
fprintf(stderr,
"Bad option type %u\n", o->type);
+
log_err(
"Bad option type %u\n", o->type);
ret = 1;
}
ret = 1;
}
@@
-649,7
+657,7
@@
match:
if (ret) {
fprintf(stderr,"Correct format for offending option\n");
fprintf(stderr, "%20s: %s\n", o->name, o->help);
if (ret) {
fprintf(stderr,"Correct format for offending option\n");
fprintf(stderr, "%20s: %s\n", o->name, o->help);
- show_option_help(o,
stderr
);
+ show_option_help(o,
1
);
}
}
}
}
@@
-775,14
+783,14
@@
int parse_cmd_option(const char *opt, const char *val,
o = find_option(options, opt);
if (!o) {
o = find_option(options, opt);
if (!o) {
-
fprintf(stderr,
"Bad option <%s>\n", opt);
+
log_err(
"Bad option <%s>\n", opt);
return 1;
}
if (!handle_option(o, val, data))
return 0;
return 1;
}
if (!handle_option(o, val, data))
return 0;
-
fprintf(stderr,
"fio: failed parsing %s=%s\n", opt, val);
+
log_err(
"fio: failed parsing %s=%s\n", opt, val);
return 1;
}
return 1;
}
@@
-851,7
+859,7
@@
int parse_option(const char *opt, struct fio_option *options, void *data)
o = get_option(tmp, options, &post);
if (!o) {
o = get_option(tmp, options, &post);
if (!o) {
-
fprintf(stderr,
"Bad option <%s>\n", tmp);
+
log_err(
"Bad option <%s>\n", tmp);
free(tmp);
return 1;
}
free(tmp);
return 1;
}
@@
-861,7
+869,7
@@
int parse_option(const char *opt, struct fio_option *options, void *data)
return 0;
}
return 0;
}
-
fprintf(stderr,
"fio: failed parsing %s\n", opt);
+
log_err(
"fio: failed parsing %s\n", opt);
free(tmp);
return 1;
}
free(tmp);
return 1;
}
@@
-1011,7
+1019,7
@@
int show_cmd_help(struct fio_option *options, const char *name)
if (!match)
continue;
if (!match)
continue;
- show_option_help(o,
stdout
);
+ show_option_help(o,
0
);
}
if (found)
}
if (found)
@@
-1026,7
+1034,7
@@
int show_cmd_help(struct fio_option *options, const char *name)
if (closest && best_dist < 3) {
printf(" - showing closest match\n");
printf("%20s: %s\n", closest->name, closest->help);
if (closest && best_dist < 3) {
printf(" - showing closest match\n");
printf("%20s: %s\n", closest->name, closest->help);
- show_option_help(closest,
stdout
);
+ show_option_help(closest,
0
);
} else
printf("\n");
} else
printf("\n");
@@
-1060,20
+1068,17
@@
void option_init(struct fio_option *o)
o->maxfp = NAN;
}
if (o->type == FIO_OPT_STR_SET && o->def) {
o->maxfp = NAN;
}
if (o->type == FIO_OPT_STR_SET && o->def) {
-
fprintf(stderr,
"Option %s: string set option with"
+
log_err(
"Option %s: string set option with"
" default will always be true\n", o->name);
}
" default will always be true\n", o->name);
}
- if (!o->cb && (!o->off1 && !o->roff1)) {
- fprintf(stderr, "Option %s: neither cb nor offset given\n",
- o->name);
- }
+ if (!o->cb && (!o->off1 && !o->roff1))
+ log_err("Option %s: neither cb nor offset given\n", o->name);
if (o->type == FIO_OPT_STR || o->type == FIO_OPT_STR_STORE ||
o->type == FIO_OPT_STR_MULTI)
return;
if (o->cb && ((o->off1 || o->off2 || o->off3 || o->off4) ||
(o->roff1 || o->roff2 || o->roff3 || o->roff4))) {
if (o->type == FIO_OPT_STR || o->type == FIO_OPT_STR_STORE ||
o->type == FIO_OPT_STR_MULTI)
return;
if (o->cb && ((o->off1 || o->off2 || o->off3 || o->off4) ||
(o->roff1 || o->roff2 || o->roff3 || o->roff4))) {
- fprintf(stderr, "Option %s: both cb and offset given\n",
- o->name);
+ log_err("Option %s: both cb and offset given\n", o->name);
}
}
}
}