X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=parse.c;h=18c4530183dbb7b74ca4b97a2e6edf3e181c9595;hp=1a686e4cceb89a5ee8446d10a4472556d3445764;hb=d5e3f5d8ef7fab70288aa57c8660bc3d2199655f;hpb=d4fc2f04e5fa3cbad31d04eefa39632a301a3d95 diff --git a/parse.c b/parse.c index 1a686e4c..18c45301 100644 --- a/parse.c +++ b/parse.c @@ -14,6 +14,7 @@ #include "parse.h" #include "debug.h" #include "options.h" +#include "minmax.h" static struct fio_option *fio_options; extern unsigned int fio_get_kb_base(void *); @@ -220,7 +221,7 @@ static unsigned long long get_mult_bytes(const char *str, int len, void *data, /* * Convert string into a floating number. Return 1 for success and 0 otherwise. */ -static int str_to_float(const char *str, double *val) +int str_to_float(const char *str, double *val) { return (1 == sscanf(str, "%lf", val)); } @@ -343,6 +344,11 @@ static int opt_len(const char *str) return (int)(postfix - str); } +static int str_match_len(const struct value_pair *vp, const char *str) +{ + return max(strlen(vp->ival), opt_len(str)); +} + #define val_store(ptr, val, off, or, data) \ do { \ ptr = td_var((data), (off)); \ @@ -360,7 +366,7 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data, long long ull, *ullp; long ul1, ul2; double uf; - char **cp; + char **cp = NULL; int ret = 0, is_time = 0; const struct value_pair *vp; struct value_pair posval[PARSE_MAX_VP]; @@ -387,7 +393,7 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data, if (!vp->ival || vp->ival[0] == '\0') continue; all_skipped = 0; - if (!strncmp(vp->ival, ptr, opt_len(ptr))) { + if (!strncmp(vp->ival, ptr, str_match_len(vp, ptr))) { ret = 0; if (o->roff1) { if (vp->or) @@ -505,7 +511,7 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data, 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; } @@ -535,8 +541,6 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data, cp = td_var(data, o->off1); *cp = strdup(ptr); - } else { - cp = NULL; } if (fn) @@ -550,7 +554,7 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data, if (!vp->ival || vp->ival[0] == '\0') continue; all_skipped = 0; - if (!strncmp(vp->ival, ptr, opt_len(ptr))) { + if (!strncmp(vp->ival, ptr, str_match_len(vp, ptr))) { char *rest; ret = 0;