X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=parse.c;h=f54dae625bbbb59387f035cdb08f9fe1768675e1;hp=83227e92b9a2f31944523ecc5b045be9de5d1204;hb=fdc0f3b646e417497849d4398029f780b0e5262f;hpb=cca5b5bc3a622b4f4a103d05c55284fc167a0b82 diff --git a/parse.c b/parse.c index 83227e92..f54dae62 100644 --- a/parse.c +++ b/parse.c @@ -18,8 +18,7 @@ #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) { @@ -174,32 +173,32 @@ static unsigned long long __get_mult_bytes(const char *p, void *data, } } - if (!strcmp("pib", c)) { + if (!strncmp("pib", c, 3)) { pow = 5; mult = 1000; - } else if (!strcmp("tib", c)) { + } else if (!strncmp("tib", c, 3)) { pow = 4; mult = 1000; - } else if (!strcmp("gib", c)) { + } else if (!strncmp("gib", c, 3)) { pow = 3; mult = 1000; - } else if (!strcmp("mib", c)) { + } else if (!strncmp("mib", c, 3)) { pow = 2; mult = 1000; - } else if (!strcmp("kib", c)) { + } else if (!strncmp("kib", c, 3)) { pow = 1; mult = 1000; - } else if (!strcmp("p", c) || !strcmp("pb", c)) + } else if (!strncmp("p", c, 1) || !strncmp("pb", c, 2)) pow = 5; - else if (!strcmp("t", c) || !strcmp("tb", c)) + else if (!strncmp("t", c, 1) || !strncmp("tb", c, 2)) pow = 4; - else if (!strcmp("g", c) || !strcmp("gb", c)) + else if (!strncmp("g", c, 1) || !strncmp("gb", c, 2)) pow = 3; - else if (!strcmp("m", c) || !strcmp("mb", c)) + else if (!strncmp("m", c, 1) || !strncmp("mb", c, 2)) pow = 2; - else if (!strcmp("k", c) || !strcmp("kb", c)) + else if (!strncmp("k", c, 1) || !strncmp("kb", c, 2)) pow = 1; - else if (!strcmp("%", c)) { + else if (!strncmp("%", c, 1)) { *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; } -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); } -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); } @@ -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); + dprint(FD_PARSE, " ret=%d, out=%llu\n", ret, ull); + if (ret) break; @@ -577,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; + dprint(FD_PARSE, " out=%f\n", uf); + /* ** Calculate precision for output by counting ** number of digits after period. Find first @@ -746,6 +749,8 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data, else il = 1; + dprint(FD_PARSE, " ret=%d, out=%d\n", ret, il); + if (ret) break; @@ -896,14 +901,14 @@ static int opt_cmp(const void *p1, const void *p2) 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)); - o = get_option(s, fio_options, &foo); + o = get_option(s, __fio_options, &foo); if (o) prio2 = o->prio; free(s); @@ -914,9 +919,9 @@ static int opt_cmp(const void *p1, const void *p2) 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); - fio_options = NULL; + __fio_options = NULL; } int parse_cmd_option(const char *opt, const char *val, @@ -1081,6 +1086,8 @@ int show_cmd_help(struct fio_option *options, const char *name) 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) ||