brintos

brintos / linux-shallow public Read only

0
0
Text · 1.0 KiB · a841d17 Raw
71 lines · c
1#include <stdlib.h>2#include <stdint.h>3#include <string.h>4#include <stdio.h>5 6#include "util/debug.h"7#include "util/parse-sublevel-options.h"8 9static int parse_one_sublevel_option(const char *str,10				     struct sublevel_option *opts)11{12	struct sublevel_option *opt = opts;13	char *vstr, *s = strdup(str);14	int v = 1;15 16	if (!s) {17		pr_err("no memory\n");18		return -1;19	}20 21	vstr = strchr(s, '=');22	if (vstr)23		*vstr++ = 0;24 25	while (opt->name) {26		if (!strcmp(s, opt->name))27			break;28		opt++;29	}30 31	if (!opt->name) {32		pr_err("Unknown option name '%s'\n", s);33		free(s);34		return -1;35	}36 37	if (vstr)38		v = atoi(vstr);39 40	*opt->value_ptr = v;41	free(s);42	return 0;43}44 45/* parse options like --foo a=<n>,b,c... */46int perf_parse_sublevel_options(const char *str, struct sublevel_option *opts)47{48	char *s = strdup(str);49	char *p = NULL;50	int ret;51 52	if (!s) {53		pr_err("no memory\n");54		return -1;55	}56 57	p = strtok(s, ",");58	while (p) {59		ret = parse_one_sublevel_option(p, opts);60		if (ret) {61			free(s);62			return ret;63		}64 65		p = strtok(NULL, ",");66	}67 68	free(s);69	return 0;70}71