X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=parse.c;h=fc508b674cff11555d2f3e5f73aea7a32d7cd101;hp=086f7864b8b6eb16ee0aa6527e86a32079833bfd;hb=7582368670f2025a1f810bd4ffb5ca91e278b66a;hpb=675d2d651cce01e8c18cc6fda8bb44e1d9e405bd diff --git a/parse.c b/parse.c index 086f7864..fc508b67 100644 --- a/parse.c +++ b/parse.c @@ -207,32 +207,50 @@ static unsigned long long __get_mult_bytes(const char *p, void *data, } } + /* If kb_base is 1000, use true units. + * If kb_base is 1024, use opposite units. + */ if (!strncmp("pib", c, 3)) { pow = 5; - mult = 1000; + if (kb_base == 1000) + mult = 1024; + else if (kb_base == 1024) + mult = 1000; } else if (!strncmp("tib", c, 3)) { pow = 4; - mult = 1000; + if (kb_base == 1000) + mult = 1024; + else if (kb_base == 1024) + mult = 1000; } else if (!strncmp("gib", c, 3)) { pow = 3; - mult = 1000; + if (kb_base == 1000) + mult = 1024; + else if (kb_base == 1024) + mult = 1000; } else if (!strncmp("mib", c, 3)) { pow = 2; - mult = 1000; + if (kb_base == 1000) + mult = 1024; + else if (kb_base == 1024) + mult = 1000; } else if (!strncmp("kib", c, 3)) { pow = 1; - mult = 1000; - } else if (!strncmp("p", c, 1) || !strncmp("pb", c, 2)) + if (kb_base == 1000) + mult = 1024; + else if (kb_base == 1024) + mult = 1000; + } else if (!strncmp("p", c, 1) || !strncmp("pb", c, 2)) { pow = 5; - else if (!strncmp("t", c, 1) || !strncmp("tb", c, 2)) + } else if (!strncmp("t", c, 1) || !strncmp("tb", c, 2)) { pow = 4; - else if (!strncmp("g", c, 1) || !strncmp("gb", c, 2)) + } else if (!strncmp("g", c, 1) || !strncmp("gb", c, 2)) { pow = 3; - else if (!strncmp("m", c, 1) || !strncmp("mb", c, 2)) + } else if (!strncmp("m", c, 1) || !strncmp("mb", c, 2)) { pow = 2; - else if (!strncmp("k", c, 1) || !strncmp("kb", c, 2)) + } else if (!strncmp("k", c, 1) || !strncmp("kb", c, 2)) { pow = 1; - else if (!strncmp("%", c, 1)) { + } else if (!strncmp("%", c, 1)) { *percent = 1; free(c); return ret; @@ -1250,7 +1268,7 @@ void fill_default_options(void *data, struct fio_option *options) handle_option(o, o->def, data); } -void option_init(struct fio_option *o) +static void option_init(struct fio_option *o) { if (o->type == FIO_OPT_DEPRECATED || o->type == FIO_OPT_UNSUPPORTED) return; @@ -1301,6 +1319,23 @@ void options_init(struct fio_option *options) } } +void options_mem_dupe(struct fio_option *options, void *data) +{ + struct fio_option *o; + char **ptr; + + dprint(FD_PARSE, "dup options\n"); + + for (o = &options[0]; o->name; o++) { + if (o->type != FIO_OPT_STR_STORE) + continue; + + ptr = td_var(data, o, o->off1); + if (*ptr) + *ptr = strdup(*ptr); + } +} + void options_free(struct fio_option *options, void *data) { struct fio_option *o;