diff options
Diffstat (limited to 'tools/perf/util/config.c')
| -rw-r--r-- | tools/perf/util/config.c | 64 | 
1 files changed, 63 insertions, 1 deletions
diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c index dabe892d0e5..e02d78cae70 100644 --- a/tools/perf/util/config.c +++ b/tools/perf/util/config.c @@ -11,6 +11,11 @@  #define MAXNAME (256) +#define DEBUG_CACHE_DIR ".debug" + + +char buildid_dir[MAXPATHLEN]; /* root dir for buildid, binary cache */ +  static FILE *config_file;  static const char *config_file_name;  static int config_linenr; @@ -127,7 +132,7 @@ static int get_value(config_fn_t fn, void *data, char *name, unsigned int len)  			break;  		if (!iskeychar(c))  			break; -		name[len++] = tolower(c); +		name[len++] = c;  		if (len >= MAXNAME)  			return -1;  	} @@ -327,6 +332,13 @@ int perf_config_bool(const char *name, const char *value)  	return !!perf_config_bool_or_int(name, value, &discard);  } +const char *perf_config_dirname(const char *name, const char *value) +{ +	if (!name) +		return NULL; +	return value; +} +  static int perf_default_core_config(const char *var __used, const char *value __used)  {  	/* Add other config variables here and to Documentation/config.txt. */ @@ -428,3 +440,53 @@ int config_error_nonbool(const char *var)  {  	return error("Missing value for '%s'", var);  } + +struct buildid_dir_config { +	char *dir; +}; + +static int buildid_dir_command_config(const char *var, const char *value, +				      void *data) +{ +	struct buildid_dir_config *c = data; +	const char *v; + +	/* same dir for all commands */ +	if (!prefixcmp(var, "buildid.") && !strcmp(var + 8, "dir")) { +		v = perf_config_dirname(var, value); +		if (!v) +			return -1; +		strncpy(c->dir, v, MAXPATHLEN-1); +		c->dir[MAXPATHLEN-1] = '\0'; +	} +	return 0; +} + +static void check_buildid_dir_config(void) +{ +	struct buildid_dir_config c; +	c.dir = buildid_dir; +	perf_config(buildid_dir_command_config, &c); +} + +void set_buildid_dir(void) +{ +	buildid_dir[0] = '\0'; + +	/* try config file */ +	check_buildid_dir_config(); + +	/* default to $HOME/.debug */ +	if (buildid_dir[0] == '\0') { +		char *v = getenv("HOME"); +		if (v) { +			snprintf(buildid_dir, MAXPATHLEN-1, "%s/%s", +				 v, DEBUG_CACHE_DIR); +		} else { +			strncpy(buildid_dir, DEBUG_CACHE_DIR, MAXPATHLEN-1); +		} +		buildid_dir[MAXPATHLEN-1] = '\0'; +	} +	/* for communicating with external commands */ +	setenv("PERF_BUILDID_DIR", buildid_dir, 1); +}  |