aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/config.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util/config.c')
-rw-r--r--tools/perf/util/config.c57
1 files changed, 22 insertions, 35 deletions
diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
index 4e727635476e..5c20d783423b 100644
--- a/tools/perf/util/config.c
+++ b/tools/perf/util/config.c
@@ -377,6 +377,21 @@ const char *perf_config_dirname(const char *name, const char *value)
377 return value; 377 return value;
378} 378}
379 379
380static int perf_buildid_config(const char *var, const char *value)
381{
382 /* same dir for all commands */
383 if (!strcmp(var, "buildid.dir")) {
384 const char *dirname = perf_config_dirname(var, value);
385
386 if (!dirname)
387 return -1;
388 strncpy(buildid_dir, dirname, MAXPATHLEN-1);
389 buildid_dir[MAXPATHLEN-1] = '\0';
390 }
391
392 return 0;
393}
394
380static int perf_default_core_config(const char *var __maybe_unused, 395static int perf_default_core_config(const char *var __maybe_unused,
381 const char *value __maybe_unused) 396 const char *value __maybe_unused)
382{ 397{
@@ -412,6 +427,9 @@ int perf_default_config(const char *var, const char *value,
412 if (!prefixcmp(var, "llvm.")) 427 if (!prefixcmp(var, "llvm."))
413 return perf_llvm_config(var, value); 428 return perf_llvm_config(var, value);
414 429
430 if (!prefixcmp(var, "buildid."))
431 return perf_buildid_config(var, value);
432
415 /* Add other config variables here. */ 433 /* Add other config variables here. */
416 return 0; 434 return 0;
417} 435}
@@ -515,49 +533,18 @@ int config_error_nonbool(const char *var)
515 return error("Missing value for '%s'", var); 533 return error("Missing value for '%s'", var);
516} 534}
517 535
518struct buildid_dir_config {
519 char *dir;
520};
521
522static int buildid_dir_command_config(const char *var, const char *value,
523 void *data)
524{
525 struct buildid_dir_config *c = data;
526 const char *v;
527
528 /* same dir for all commands */
529 if (!strcmp(var, "buildid.dir")) {
530 v = perf_config_dirname(var, value);
531 if (!v)
532 return -1;
533 strncpy(c->dir, v, MAXPATHLEN-1);
534 c->dir[MAXPATHLEN-1] = '\0';
535 }
536 return 0;
537}
538
539static void check_buildid_dir_config(void)
540{
541 struct buildid_dir_config c;
542 c.dir = buildid_dir;
543 perf_config(buildid_dir_command_config, &c);
544}
545
546void set_buildid_dir(const char *dir) 536void set_buildid_dir(const char *dir)
547{ 537{
548 if (dir) 538 if (dir)
549 scnprintf(buildid_dir, MAXPATHLEN-1, "%s", dir); 539 scnprintf(buildid_dir, MAXPATHLEN-1, "%s", dir);
550 540
551 /* try config file */
552 if (buildid_dir[0] == '\0')
553 check_buildid_dir_config();
554
555 /* default to $HOME/.debug */ 541 /* default to $HOME/.debug */
556 if (buildid_dir[0] == '\0') { 542 if (buildid_dir[0] == '\0') {
557 char *v = getenv("HOME"); 543 char *home = getenv("HOME");
558 if (v) { 544
545 if (home) {
559 snprintf(buildid_dir, MAXPATHLEN-1, "%s/%s", 546 snprintf(buildid_dir, MAXPATHLEN-1, "%s/%s",
560 v, DEBUG_CACHE_DIR); 547 home, DEBUG_CACHE_DIR);
561 } else { 548 } else {
562 strncpy(buildid_dir, DEBUG_CACHE_DIR, MAXPATHLEN-1); 549 strncpy(buildid_dir, DEBUG_CACHE_DIR, MAXPATHLEN-1);
563 } 550 }