return strlen(vp2->ival) - strlen(vp1->ival);
}
-static int posval_sort(struct fio_option *o, struct value_pair *vpmap)
+static void posval_sort(struct fio_option *o, struct value_pair *vpmap)
{
const struct value_pair *vp;
int entries;
- if (!o->posval[0].ival)
- return 0;
-
memset(vpmap, 0, PARSE_MAX_VP * sizeof(struct value_pair));
for (entries = 0; entries < PARSE_MAX_VP; entries++) {
}
qsort(vpmap, entries, sizeof(struct value_pair), vp_cmp);
- return 1;
}
static void show_option_range(struct fio_option *o, FILE *out)
int *percent)
{
const char *p = str;
+ int digit_seen = 0;
if (len < 2)
return __get_mult_bytes(str, data, percent);
* Go forward until we hit a non-digit, or +/- sign
*/
while ((p - str) <= len) {
- if (!isdigit((int) *p) && (*p != '+') && (*p != '-'))
+ if (!isdigit((int) *p) &&
+ (((*p != '+') && (*p != '-')) || digit_seen))
break;
+ digit_seen |= isdigit(*p);
p++;
}
case FIO_OPT_STR_STORE: {
fio_opt_str_fn *fn = o->cb;
- if (!posval_sort(o, posval))
+ posval_sort(o, posval);
+
+ if (!o->posval[0].ival) {
+ vp = NULL;
goto match;
+ }
ret = 1;
for (i = 0; i < PARSE_MAX_VP; i++) {
if (rest) {
*rest = '\0';
ptr = rest + 1;
- } else
+ } else if (vp && vp->cb)
ptr = NULL;
break;
}