mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.0 KiB
70 lines
1.0 KiB
#include <stdlib.h> |
|
#include <stdint.h> |
|
#include <string.h> |
|
#include <stdio.h> |
|
|
|
#include "util/debug.h" |
|
#include "util/parse-sublevel-options.h" |
|
|
|
static int parse_one_sublevel_option(const char *str, |
|
struct sublevel_option *opts) |
|
{ |
|
struct sublevel_option *opt = opts; |
|
char *vstr, *s = strdup(str); |
|
int v = 1; |
|
|
|
if (!s) { |
|
pr_err("no memory\n"); |
|
return -1; |
|
} |
|
|
|
vstr = strchr(s, '='); |
|
if (vstr) |
|
*vstr++ = 0; |
|
|
|
while (opt->name) { |
|
if (!strcmp(s, opt->name)) |
|
break; |
|
opt++; |
|
} |
|
|
|
if (!opt->name) { |
|
pr_err("Unknown option name '%s'\n", s); |
|
free(s); |
|
return -1; |
|
} |
|
|
|
if (vstr) |
|
v = atoi(vstr); |
|
|
|
*opt->value_ptr = v; |
|
free(s); |
|
return 0; |
|
} |
|
|
|
/* parse options like --foo a=<n>,b,c... */ |
|
int perf_parse_sublevel_options(const char *str, struct sublevel_option *opts) |
|
{ |
|
char *s = strdup(str); |
|
char *p = NULL; |
|
int ret; |
|
|
|
if (!s) { |
|
pr_err("no memory\n"); |
|
return -1; |
|
} |
|
|
|
p = strtok(s, ","); |
|
while (p) { |
|
ret = parse_one_sublevel_option(p, opts); |
|
if (ret) { |
|
free(s); |
|
return ret; |
|
} |
|
|
|
p = strtok(NULL, ","); |
|
} |
|
|
|
free(s); |
|
return 0; |
|
}
|
|
|