Files
cubelinux-kernel/tools/perf/util/parse-sublevel-options.c
Greg Kroah-Hartman 598cf27219 Linux 6.19.3
Link: https://lore.kernel.org/r/20260217200002.683975158@linuxfoundation.org
Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
Tested-by: Takeshi Ogasawara <takeshi.ogasawara@futuring-girl.com>
Tested-by: Peter Schneider <pschneider1968@googlemail.com>
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Tested-by: Salvatore Bonaccorso <carnil@debian.org>
Tested-by: Brett A C Sheffield <bacs@librecast.net>
Tested-by: Mark Brown <broonie@kernel.org>
Tested-by: Luna Jernberg <droidbittin@gmail.com>
Tested-by: Ronald Warsow <rwarsow@gmx.de>
Tested-by: Justin M. Forbes <jforbes@fedoraproject.org>
Tested-by: Ron Economos <re@w6rz.net>
Tested-by: Miguel Ojeda <ojeda@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2026-02-19 16:33:27 +01:00

71 lines
1.0 KiB
C

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