/* * Since "var" actually contains the section name and the real * config variable name separated by a dot, we have to know where the dot is.
*/ if (last_dot == NULL || last_dot == arg) {
pr_err("The config variable does not contain a section name: %s\n", arg); return -1;
} if (!last_dot[1]) {
pr_err("The config variable does not contain a variable name: %s\n", arg); return -1;
}
*value = strchr(arg, '='); if (*value == NULL)
*var = arg; elseif (!strcmp(*value, "=")) {
pr_err("The config variable does not contain a value: %s\n", arg); return -1;
} else {
*value = *value + 1; /* excluding a first character '=' */
*var = strsep(&arg, "="); if (*var[0] == '\0') {
pr_err("invalid config variable: %s\n", arg); return -1;
}
}
return 0;
}
int perf_config__set_variable(constchar *var, constchar *value)
{ char path[PATH_MAX]; char *user_config = mkpath(path, sizeof(path), "%s/.perfconfig", getenv("HOME")); constchar *config_filename; struct perf_config_set *set; int ret = -1;
if (use_system_config)
config_exclusive_filename = perf_etc_perfconfig(); elseif (use_user_config)
config_exclusive_filename = user_config;
if (!config_exclusive_filename)
config_filename = user_config; else
config_filename = config_exclusive_filename;
set = perf_config_set__new(); if (!set) goto out_err;
if (perf_config_set__collect(set, config_filename, var, value) < 0) {
pr_err("Failed to add '%s=%s'\n", var, value); goto out_err;
}
if (set_config(set, config_filename) < 0) {
pr_err("Failed to set the configs on %s\n", config_filename); goto out_err;
}
ret = 0;
out_err:
perf_config_set__delete(set); return ret;
}
int cmd_config(int argc, constchar **argv)
{ int i, ret = -1; struct perf_config_set *set; char path[PATH_MAX]; char *user_config = mkpath(path, sizeof(path), "%s/.perfconfig", getenv("HOME")); constchar *config_filename; bool changed = false;
if (use_system_config && use_user_config) {
pr_err("Error: only one config file at a time\n");
parse_options_usage(config_usage, config_options, "user", 0);
parse_options_usage(NULL, config_options, "system", 0); return -1;
}
if (use_system_config)
config_exclusive_filename = perf_etc_perfconfig(); elseif (use_user_config)
config_exclusive_filename = user_config;
if (!config_exclusive_filename)
config_filename = user_config; else
config_filename = config_exclusive_filename;
/* * At only 'config' sub-command, individually use the config set * because of reinitializing with options config file location.
*/
set = perf_config_set__new(); if (!set) goto out_err;
switch (actions) { case ACTION_LIST: if (argc) {
pr_err("Error: takes no arguments\n");
parse_options_usage(config_usage, config_options, "l", 1);
} else {
do_action_list: if (show_config(set) < 0) {
pr_err("Nothing configured, " "please check your %s \n", config_filename); goto out_err;
}
} break; default: if (!argc) goto do_action_list;
for (i = 0; argv[i]; i++) { char *var, *value; char *arg = strdup(argv[i]);
if (!arg) {
pr_err("%s: strdup failed\n", __func__); goto out_err;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.