projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' into gfio
[fio.git]
/
parse.c
diff --git
a/parse.c
b/parse.c
index c8b7545a27b85ee3649d95798940b5746ae3576b..9a6494f32db811746ba46303b5f300a83e1ddfc6 100644
(file)
--- a/
parse.c
+++ b/
parse.c
@@
-15,8
+15,7
@@
#include "debug.h"
#include "options.h"
#include "debug.h"
#include "options.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)
{
@@
-47,7
+46,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 (isnan(o->minfp) && isnan(o->maxfp))
return;
if (isnan(o->minfp) && isnan(o->maxfp))
return;
@@
-153,32
+152,32
@@
static unsigned long long __get_mult_bytes(const char *p, void *data,
for (i = 0; i < strlen(c); i++)
c[i] = tolower(c[i]);
for (i = 0; i < strlen(c); i++)
c[i] = tolower(c[i]);
- 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;
@@
-260,7
+259,7
@@
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);
}
@@
-356,7
+355,7
@@
static int __handle_option(struct fio_option *o, const char *ptr, void *data,
int first, int more, int curr)
{
int il, *ilp;
int first, int more, int curr)
{
int il, *ilp;
- double
*
flp;
+ double
*
flp;
long long ull, *ullp;
long ul1, ul2;
double uf;
long long ull, *ullp;
long ul1, ul2;
double uf;
@@
-430,13
+429,13
@@
static int __handle_option(struct fio_option *o, const char *ptr, void *data,
break;
if (o->maxval && ull > o->maxval) {
break;
if (o->maxval && ull > o->maxval) {
- log_err("max value out of range: %ll
d
"
- " (%
d
max)\n", ull, o->maxval);
+ log_err("max value out of range: %ll
u
"
+ " (%
u
max)\n", ull, o->maxval);
return 1;
}
if (o->minval && ull < o->minval) {
return 1;
}
if (o->minval && ull < o->minval) {
- log_err("min value out of range: %ll
d
"
- " (%
d
min)\n", ull, o->minval);
+ log_err("min value out of range: %ll
u
"
+ " (%
u
min)\n", ull, o->minval);
return 1;
}
return 1;
}
@@
-505,7
+504,7
@@
static int __handle_option(struct fio_option *o, const char *ptr, void *data,
o->maxlen);
return 1;
}
o->maxlen);
return 1;
}
- if
(!str_to_float(ptr, &uf))
{
+ if
(!str_to_float(ptr, &uf))
{
log_err("not a floating point value: %s\n", ptr);
return 1;
}
log_err("not a floating point value: %s\n", ptr);
return 1;
}
@@
-827,14
+826,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);
@@
-845,9
+844,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,
@@
-890,9
+889,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;
@@
-1087,6
+1085,10
@@
void option_init(struct fio_option *o)
o->minval = 0;
o->maxval = 1;
}
o->minval = 0;
o->maxval = 1;
}
+ if (o->type == FIO_OPT_INT) {
+ if (!o->maxval)
+ o->maxval = UINT_MAX;
+ }
if (o->type == FIO_OPT_FLOAT_LIST) {
o->minfp = NAN;
o->maxfp = NAN;
if (o->type == FIO_OPT_FLOAT_LIST) {
o->minfp = NAN;
o->maxfp = NAN;
@@
-1104,6
+1106,10
@@
void option_init(struct fio_option *o)
(o->roff1 || o->roff2 || o->roff3 || o->roff4))) {
log_err("Option %s: both cb and offset given\n", o->name);
}
(o->roff1 || o->roff2 || o->roff3 || o->roff4))) {
log_err("Option %s: both cb and offset given\n", o->name);
}
+ if (!o->category) {
+ log_info("Options %s: no category defined. Setting to misc\n", o->name);
+ o->category = FIO_OPT_C_GENERAL;
+ }
}
/*
}
/*
@@
-1116,8
+1122,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)