The change to allow -/+ for values broke ranges.
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
- if (str_to_decimal(fname, &val, 1, td)) {
+ if (str_to_decimal(fname, &val, 1, 1, td)) {
log_err("fio: bssplit conversion failed\n");
free(td->o.bssplit);
return 1;
log_err("fio: bssplit conversion failed\n");
free(td->o.bssplit);
return 1;
- if (str_to_decimal(nr, &val, 1, td)) {
+ if (str_to_decimal(nr, &val, 1, 0, td)) {
log_err("fio: rw postfix parsing failed\n");
free(nr);
return 1;
log_err("fio: rw postfix parsing failed\n");
free(nr);
return 1;
}
static unsigned long long get_mult_bytes(const char *str, int len, void *data,
}
static unsigned long long get_mult_bytes(const char *str, int len, void *data,
+ int *percent, int is_range)
* Go forward until we hit a non-digit, or +/- sign
*/
while ((p - str) <= len) {
* 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 != '+'))
+ break;
+ if (!is_range && (*p != '-'))
/*
* convert string into decimal value, noting any size suffix
*/
/*
* convert string into decimal value, noting any size suffix
*/
-int str_to_decimal(const char *str, long long *val, int kilo, void *data)
+int str_to_decimal(const char *str, long long *val, int kilo, int is_range, void *data)
unsigned long long mult;
int perc = 0;
unsigned long long mult;
int perc = 0;
- mult = get_mult_bytes(str, len, data, &perc);
+ mult = get_mult_bytes(str, len, data, &perc, is_range);
if (perc)
*val = -1ULL - *val;
else
if (perc)
*val = -1ULL - *val;
else
-static int check_str_bytes(const char *p, long long *val, void *data)
+static int check_str_bytes(const char *p, long long *val, int is_range, void *data)
- return str_to_decimal(p, val, 1, data);
+ return str_to_decimal(p, val, 1, is_range, data);
}
static int check_str_time(const char *p, long long *val)
{
}
static int check_str_time(const char *p, long long *val)
{
- return str_to_decimal(p, val, 0, NULL);
+ return str_to_decimal(p, val, 0, 0, NULL);
}
void strip_blank_front(char **p)
}
void strip_blank_front(char **p)
- if (!str_to_decimal(str, &__val, 1, data)) {
+ if (!str_to_decimal(str, &__val, 1, 1, data)) {
*val = __val;
return 0;
}
*val = __val;
return 0;
}
if (is_time)
ret = check_str_time(ptr, &ull);
else
if (is_time)
ret = check_str_time(ptr, &ull);
else
- ret = check_str_bytes(ptr, &ull, data);
+ ret = check_str_bytes(ptr, &ull, 0, data);
extern void strip_blank_front(char **);
extern void strip_blank_end(char *);
extern void strip_blank_front(char **);
extern void strip_blank_end(char *);
-extern int str_to_decimal(const char *, long long *, int, void *);
+extern int str_to_decimal(const char *, long long *, int, int, void *);
/*
* Handlers for the options
/*
* Handlers for the options