projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fio: groundwork for adding slat, lat percentiles
[fio.git]
/
parse.c
diff --git
a/parse.c
b/parse.c
index 9a20d0c778260bc9ee5b2b3387c4fcb851c4ca0f..04b2e1989e34b0fa54810a4f97d8649f0f53eb91 100644
(file)
--- a/
parse.c
+++ b/
parse.c
@@
-373,12
+373,16
@@
int str_to_decimal(const char *str, long long *val, int kilo, void *data,
#endif
if (rc == 1) {
#endif
if (rc == 1) {
+ char *endptr;
+
if (strstr(str, "0x") || strstr(str, "0X"))
base = 16;
else
base = 10;
if (strstr(str, "0x") || strstr(str, "0X"))
base = 16;
else
base = 10;
- *val = strtoll(str, NULL, base);
+ *val = strtoll(str, &endptr, base);
+ if (*val == 0 && endptr == str)
+ return 1;
if (*val == LONG_MAX && errno == ERANGE)
return 1;
}
if (*val == LONG_MAX && errno == ERANGE)
return 1;
}
@@
-513,9
+517,9
@@
static bool val_too_large(const struct fio_option *o, unsigned long long val,
return false;
if (is_uint) {
return false;
if (is_uint) {
- unsigned int uint_val = val;
-
- return
uint_
val > o->maxval;
+ if ((int) val < 0)
+ return (int) val > (int) o->maxval;
+ return
(unsigned int)
val > o->maxval;
}
return val > o->maxval;
}
return val > o->maxval;
@@
-527,11
+531,8
@@
static bool val_too_small(const struct fio_option *o, unsigned long long val,
if (!o->minval)
return false;
if (!o->minval)
return false;
- if (is_uint) {
- unsigned int uint_val = val;
-
- return uint_val < o->minval;
- }
+ if (is_uint)
+ return (int) val < o->minval;
return val < o->minval;
}
return val < o->minval;
}
@@
-605,8
+606,7
@@
static int __handle_option(const struct fio_option *o, const char *ptr,
if (!is_time && o->is_time)
is_time = o->is_time;
if (!is_time && o->is_time)
is_time = o->is_time;
- tmp[sizeof(tmp) - 1] = '\0';
- strncpy(tmp, ptr, sizeof(tmp) - 1);
+ snprintf(tmp, sizeof(tmp), "%s", ptr);
p = strchr(tmp, ',');
if (p)
*p = '\0';
p = strchr(tmp, ',');
if (p)
*p = '\0';
@@
-832,8
+832,7
@@
static int __handle_option(const struct fio_option *o, const char *ptr,
char tmp[128];
char *p1, *p2;
char tmp[128];
char *p1, *p2;
- tmp[sizeof(tmp) - 1] = '\0';
- strncpy(tmp, ptr, sizeof(tmp) - 1);
+ snprintf(tmp, sizeof(tmp), "%s", ptr);
/* Handle bsrange with separate read,write values: */
p1 = strchr(tmp, ',');
/* Handle bsrange with separate read,write values: */
p1 = strchr(tmp, ',');
@@
-1049,7
+1048,20
@@
struct fio_option *find_option(struct fio_option *options, const char *opt)
const struct fio_option *
find_option_c(const struct fio_option *options, const char *opt)
{
const struct fio_option *
find_option_c(const struct fio_option *options, const char *opt)
{
- return find_option((struct fio_option *)options, opt);
+ const struct fio_option *o;
+
+ for (o = &options[0]; o->name; o++) {
+ if (!o_match(o, opt))
+ continue;
+ if (o->type == FIO_OPT_UNSUPPORTED) {
+ log_err("Option <%s>: %s\n", o->name, o->help);
+ continue;
+ }
+
+ return o;
+ }
+
+ return NULL;
}
static const struct fio_option *
}
static const struct fio_option *