projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix problem with --showcmd and callbacks that verify
[fio.git]
/
parse.c
diff --git
a/parse.c
b/parse.c
index dddcb8e51cc007634c60050de0a812f7518ca8c1..5e3573ea646fcb52ca1b08d043712d2c89efb0c6 100644
(file)
--- a/
parse.c
+++ b/
parse.c
@@
-18,8
+18,7
@@
#include "minmax.h"
#include "lib/ieee754.h"
#include "minmax.h"
#include "lib/ieee754.h"
-static struct fio_option *fio_options;
-extern unsigned int fio_get_kb_base(void *);
+static struct fio_option *__fio_options;
static int vp_cmp(const void *p1, const void *p2)
{
static int vp_cmp(const void *p1, const void *p2)
{
@@
-50,7
+49,7
@@
static void posval_sort(struct fio_option *o, struct value_pair *vpmap)
static void show_option_range(struct fio_option *o,
int (*logger)(const char *format, ...))
{
static void show_option_range(struct fio_option *o,
int (*logger)(const char *format, ...))
{
- if (o->type == FIO_OPT_FLOAT_LIST){
+ if (o->type == FIO_OPT_FLOAT_LIST)
{
if (o->minfp == DBL_MIN && o->maxfp == DBL_MAX)
return;
if (o->minfp == DBL_MIN && o->maxfp == DBL_MAX)
return;
@@
-58,7
+57,7
@@
static void show_option_range(struct fio_option *o,
if (o->maxfp != DBL_MAX)
logger(", max=%f", o->maxfp);
logger("\n");
if (o->maxfp != DBL_MAX)
logger(", max=%f", o->maxfp);
logger("\n");
- } else {
+ } else
if (!o->posval[0].ival)
{
if (!o->minval && !o->maxval)
return;
if (!o->minval && !o->maxval)
return;
@@
-174,32
+173,32
@@
static unsigned long long __get_mult_bytes(const char *p, void *data,
}
}
}
}
- if (!str
cmp("pib", c
)) {
+ if (!str
ncmp("pib", c, 3
)) {
pow = 5;
mult = 1000;
pow = 5;
mult = 1000;
- } else if (!str
cmp("tib", c
)) {
+ } else if (!str
ncmp("tib", c, 3
)) {
pow = 4;
mult = 1000;
pow = 4;
mult = 1000;
- } else if (!str
cmp("gib", c
)) {
+ } else if (!str
ncmp("gib", c, 3
)) {
pow = 3;
mult = 1000;
pow = 3;
mult = 1000;
- } else if (!str
cmp("mib", c
)) {
+ } else if (!str
ncmp("mib", c, 3
)) {
pow = 2;
mult = 1000;
pow = 2;
mult = 1000;
- } else if (!str
cmp("kib", c
)) {
+ } else if (!str
ncmp("kib", c, 3
)) {
pow = 1;
mult = 1000;
pow = 1;
mult = 1000;
- } else if (!str
cmp("p", c) || !strcmp("pb", c
))
+ } else if (!str
ncmp("p", c, 1) || !strncmp("pb", c, 2
))
pow = 5;
pow = 5;
- else if (!str
cmp("t", c) || !strcmp("tb", c
))
+ else if (!str
ncmp("t", c, 1) || !strncmp("tb", c, 2
))
pow = 4;
pow = 4;
- else if (!str
cmp("g", c) || !strcmp("gb", c
))
+ else if (!str
ncmp("g", c, 1) || !strncmp("gb", c, 2
))
pow = 3;
pow = 3;
- else if (!str
cmp("m", c) || !strcmp("mb", c
))
+ else if (!str
ncmp("m", c, 1) || !strncmp("mb", c, 2
))
pow = 2;
pow = 2;
- else if (!str
cmp("k", c) || !strcmp("kb", c
))
+ else if (!str
ncmp("k", c, 1) || !strncmp("kb", c, 2
))
pow = 1;
pow = 1;
- else if (!str
cmp("%", c
)) {
+ else if (!str
ncmp("%", c, 1
)) {
*percent = 1;
free(c);
return ret;
*percent = 1;
free(c);
return ret;
@@
-281,12
+280,12
@@
int str_to_decimal(const char *str, long long *val, int kilo, void *data)
return 0;
}
return 0;
}
-
static
int check_str_bytes(const char *p, long long *val, void *data)
+int check_str_bytes(const char *p, long long *val, void *data)
{
return str_to_decimal(p, val, 1, data);
}
{
return str_to_decimal(p, val, 1, data);
}
-
static
int check_str_time(const char *p, long long *val)
+int check_str_time(const char *p, long long *val)
{
return str_to_decimal(p, val, 0, NULL);
}
{
return str_to_decimal(p, val, 0, NULL);
}
@@
-381,7
+380,7
@@
static int str_match_len(const struct value_pair *vp, const char *str)
static int __handle_option(struct fio_option *o, const char *ptr, void *data,
int first, int more, int curr)
{
static int __handle_option(struct fio_option *o, const char *ptr, void *data,
int first, int more, int curr)
{
- int il, *ilp;
+ int il
=0
, *ilp;
fio_fp64_t *flp;
long long ull, *ullp;
long ul1, ul2;
fio_fp64_t *flp;
long long ull, *ullp;
long ul1, ul2;
@@
-452,6
+451,8
@@
static int __handle_option(struct fio_option *o, const char *ptr, void *data,
else
ret = check_str_bytes(tmp, &ull, data);
else
ret = check_str_bytes(tmp, &ull, data);
+ dprint(FD_PARSE, " ret=%d, out=%llu\n", ret, ull);
+
if (ret)
break;
if (ret)
break;
@@
-479,7
+480,8
@@
static int __handle_option(struct fio_option *o, const char *ptr, void *data,
}
}
if (ret) {
}
}
if (ret) {
- log_err("value %d not in allowed range\n",ull);
+ log_err("fio: value %llu not allowed:\n", ull);
+ show_option_values(o);
return 1;
}
}
return 1;
}
}
@@
-576,6
+578,8
@@
static int __handle_option(struct fio_option *o, const char *ptr, void *data,
flp = td_var(data, o->off1);
flp[curr].u.f = uf;
flp = td_var(data, o->off1);
flp[curr].u.f = uf;
+ dprint(FD_PARSE, " out=%f\n", uf);
+
/*
** Calculate precision for output by counting
** number of digits after period. Find first
/*
** Calculate precision for output by counting
** number of digits after period. Find first
@@
-745,6
+749,8
@@
static int __handle_option(struct fio_option *o, const char *ptr, void *data,
else
il = 1;
else
il = 1;
+ dprint(FD_PARSE, " ret=%d, out=%d\n", ret, il);
+
if (ret)
break;
if (ret)
break;
@@
-782,6
+788,7
@@
static int __handle_option(struct fio_option *o, const char *ptr, void *data,
}
case FIO_OPT_DEPRECATED:
log_info("Option %s is deprecated\n", o->name);
}
case FIO_OPT_DEPRECATED:
log_info("Option %s is deprecated\n", o->name);
+ ret = 1;
break;
default:
log_err("Bad option type %u\n", o->type);
break;
default:
log_err("Bad option type %u\n", o->type);
@@
-895,14
+902,14
@@
static int opt_cmp(const void *p1, const void *p2)
if (*(char **)p1) {
s = strdup(*((char **) p1));
if (*(char **)p1) {
s = strdup(*((char **) p1));
- o = get_option(s, fio_options, &foo);
+ o = get_option(s,
__
fio_options, &foo);
if (o)
prio1 = o->prio;
free(s);
}
if (*(char **)p2) {
s = strdup(*((char **) p2));
if (o)
prio1 = o->prio;
free(s);
}
if (*(char **)p2) {
s = strdup(*((char **) p2));
- o = get_option(s, fio_options, &foo);
+ o = get_option(s,
__
fio_options, &foo);
if (o)
prio2 = o->prio;
free(s);
if (o)
prio2 = o->prio;
free(s);
@@
-913,9
+920,9
@@
static int opt_cmp(const void *p1, const void *p2)
void sort_options(char **opts, struct fio_option *options, int num_opts)
{
void sort_options(char **opts, struct fio_option *options, int num_opts)
{
- fio_options = options;
+
__
fio_options = options;
qsort(opts, num_opts, sizeof(char *), opt_cmp);
qsort(opts, num_opts, sizeof(char *), opt_cmp);
- fio_options = NULL;
+
__
fio_options = NULL;
}
int parse_cmd_option(const char *opt, const char *val,
}
int parse_cmd_option(const char *opt, const char *val,
@@
-958,9
+965,8
@@
int parse_option(char *opt, const char *input,
return 1;
}
return 1;
}
- if (!handle_option(*o, post, data))
{
+ if (!handle_option(*o, post, data))
return 0;
return 0;
- }
log_err("fio: failed parsing %s\n", input);
return 1;
log_err("fio: failed parsing %s\n", input);
return 1;
@@
-1081,6
+1087,8
@@
int show_cmd_help(struct fio_option *options, const char *name)
continue;
if (!exec_profile && o->prof_name)
continue;
continue;
if (!exec_profile && o->prof_name)
continue;
+ if (exec_profile && !(o->prof_name && !strcmp(exec_profile, o->prof_name)))
+ continue;
if (name) {
if (!strcmp(name, o->name) ||
if (name) {
if (!strcmp(name, o->name) ||
@@
-1169,6
+1177,11
@@
void option_init(struct fio_option *o)
}
if (!o->cb && (!o->off1 && !o->roff1))
log_err("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->category) {
+ log_info("Option %s: no category defined. Setting to misc\n", o->name);
+ o->category = FIO_OPT_C_GENERAL;
+ o->group = FIO_OPT_G_INVALID;
+ }
if (o->type == FIO_OPT_STR || o->type == FIO_OPT_STR_STORE ||
o->type == FIO_OPT_STR_MULTI)
return;
if (o->type == FIO_OPT_STR || o->type == FIO_OPT_STR_STORE ||
o->type == FIO_OPT_STR_MULTI)
return;
@@
-1188,8
+1201,11
@@
void options_init(struct fio_option *options)
dprint(FD_PARSE, "init options\n");
dprint(FD_PARSE, "init options\n");
- for (o = &options[0]; o->name; o++)
+ for (o = &options[0]; o->name; o++)
{
option_init(o);
option_init(o);
+ if (o->inverse)
+ o->inv_opt = find_option(options, o->inverse);
+ }
}
void options_free(struct fio_option *options, void *data)
}
void options_free(struct fio_option *options, void *data)