diff options
Diffstat (limited to 'tools/perf/util/config.c')
-rw-r--r-- | tools/perf/util/config.c | 57 |
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 | ||
380 | static 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 | |||
380 | static int perf_default_core_config(const char *var __maybe_unused, | 395 | static 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 | ||
518 | struct buildid_dir_config { | ||
519 | char *dir; | ||
520 | }; | ||
521 | |||
522 | static 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 | |||
539 | static 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 | |||
546 | void set_buildid_dir(const char *dir) | 536 | void 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 | } |