/*
* convert string into decimal value, noting any size suffix
*/
-static int str_to_decimal(char *p, unsigned long long *val, int kilo)
+static int str_to_decimal(const char *str, unsigned long long *val, int kilo)
{
- char *str = p;
int len;
len = strlen(str);
return 0;
}
-static int check_str_bytes(char *p, unsigned long long *val)
+static int check_str_bytes(const char *p, unsigned long long *val)
{
return str_to_decimal(p, val, 1);
}
-static int check_str_time(char *p, unsigned long long *val)
+static int check_str_time(const char *p, unsigned long long *val)
{
return str_to_decimal(p, val, 0);
}
*(s + 1) = '\0';
}
-static int check_range_bytes(char *str, unsigned long *val)
+static int check_range_bytes(const char *str, unsigned long *val)
{
char suffix;
return 1;
}
-int check_int(char *p, unsigned int *val)
+static int check_int(const char *p, unsigned int *val)
{
if (sscanf(p, "%u", val) == 1)
return 0;
return 1;
}
-int check_strset(char *p, char *name)
-{
- return strncmp(p, name, strlen(name));
-}
-
static struct fio_option *find_option(struct fio_option *options,
const char *opt)
{
- struct fio_option *o;
- int i = 0;
-
- do {
- o = &options[i];
- if (!o->name)
- break;
+ struct fio_option *o = &options[0];
+ while (o->name) {
if (!strcmp(o->name, opt))
return o;
- i++;
- } while (1);
+ o++;
+ }
return NULL;
}
-static int handle_option(struct fio_option *o, char *ptr, void *data)
+static int handle_option(struct fio_option *o, const char *ptr, void *data)
{
unsigned int il, *ilp;
unsigned long long ull, *ullp;
unsigned long ul1, ul2, *ulp1, *ulp2;
- char *tmpbuf, **cp;
+ char **cp;
int ret = 0, is_time = 0;
- tmpbuf = malloc(4096);
-
switch (o->type) {
case FIO_OPT_STR: {
fio_opt_str_fn *fn = o->cb;
*cp = strdup(ptr);
break;
case FIO_OPT_RANGE: {
+ char tmp[128];
char *p1, *p2;
- p1 = strchr(ptr, '-');
+ strcpy(tmp, ptr);
+
+ p1 = strchr(tmp, '-');
if (!p1) {
ret = 1;
break;
p2 = p1 + 1;
*p1 = '\0';
+ p1 = tmp;
ret = 1;
if (!check_range_bytes(p1, &ul1) && !check_range_bytes(p2, &ul2)) {
ret = 1;
}
- free(tmpbuf);
return ret;
}
+int parse_cmd_option(const char *opt, const char *val,
+ struct fio_option *options, void *data)
+{
+ struct fio_option *o;
+
+ o = find_option(options, opt);
+ if (!o) {
+ fprintf(stderr, "Bad option %s\n", opt);
+ return 1;
+ }
+
+ return handle_option(o, val, data);
+}
+
int parse_option(const char *opt, struct fio_option *options, void *data)
{
- struct fio_option *o = find_option(options, opt);
+ struct fio_option *o;
char *pre, *post;
char tmp[64];