12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #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;
- }
|