X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=parse.c;h=fd5605f0c33f2bdb56dea64012b658d7d7c82b40;hp=bb16bc166af3696030ba0bef436487364901b29b;hb=0cf59b52d81ec0c70c60b9516b2e740f408b9d1c;hpb=75e6bcba7e5824b8852590fa54963db64f05c70d diff --git a/parse.c b/parse.c index bb16bc16..fd5605f0 100644 --- a/parse.c +++ b/parse.c @@ -109,6 +109,7 @@ static void show_option_help(struct fio_option *o, int is_err) "list of floating point values separated by ':' (opt=5.9:7.8)", "no argument (opt)", "deprecated", + "unsupported", }; size_t (*logger)(const char *format, ...); @@ -166,7 +167,7 @@ static unsigned long long get_mult_time(const char *str, int len, else if (!strcmp("h", c)) mult = 60 * 60 * 1000000UL; else if (!strcmp("d", c)) - mult = 24 * 60 * 60 * 1000000UL; + mult = 24 * 60 * 60 * 1000000ULL; free(c); return mult; @@ -206,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; @@ -1249,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; @@ -1300,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;