From: Jens Axboe Date: Tue, 9 Jun 2009 10:28:57 +0000 (+0200) Subject: Fix bug in parser with postfix and truncated direction values X-Git-Tag: fio-1.27.2~7 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=7c8f1a5ce2ecde0ef8372e983895855ac838c76c;ds=sidebyside Fix bug in parser with postfix and truncated direction values If you pass in foo=500k, then the 'k' multiplier will go unnoticed. Signed-off-by: Jens Axboe --- diff --git a/parse.c b/parse.c index 7dc5fcc8..c2d744b3 100644 --- a/parse.c +++ b/parse.c @@ -430,12 +430,16 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data, return ret; } -static int handle_option(struct fio_option *o, const char *ptr, void *data) +static int handle_option(struct fio_option *o, const char *__ptr, void *data) { - const char *ptr2 = NULL; + char *ptr, *ptr2 = NULL; int r1, r2; - dprint(FD_PARSE, "handle_option=%s, ptr=%s\n", o->name, ptr); + dprint(FD_PARSE, "handle_option=%s, ptr=%s\n", o->name, __ptr); + + ptr = NULL; + if (__ptr) + ptr = strdup(__ptr); /* * See if we have a second set of parameters, hidden after a comma. @@ -446,6 +450,8 @@ static int handle_option(struct fio_option *o, const char *ptr, void *data) (o->type != FIO_OPT_STR_STORE) && (o->type != FIO_OPT_STR)) { ptr2 = strchr(ptr, ','); + if (ptr2 && *(ptr2 + 1) == '\0') + *ptr2 = '\0'; if (!ptr2) ptr2 = strchr(ptr, ':'); if (!ptr2) @@ -459,12 +465,17 @@ static int handle_option(struct fio_option *o, const char *ptr, void *data) */ r1 = __handle_option(o, ptr, data, 1, !!ptr2); - if (!ptr2) + if (!ptr2) { + if (ptr) + free(ptr); return r1; + } ptr2++; r2 = __handle_option(o, ptr2, data, 0, 0); + if (ptr) + free(ptr); return r1 && r2; }