Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3e00cbe8 authored by Jiri Olsa's avatar Jiri Olsa Committed by Arnaldo Carvalho de Melo
Browse files

perf tools: Do not fail in case of empty HOME env variable



Currently we fail in the following case:

  $ unset HOME
  $ ./perf record ls
  $ echo $?
  255

It's because the config code init fails due to a missing HOME variable
value. Fix this by skipping the user config init if there's no HOME
variable value.

Reported-by: default avatarJan Stancek <jstancek@redhat.com>
Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20170330144637.7468-1-jolsa@kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 67ef2879
Loading
Loading
Loading
Loading
+31 −23
Original line number Diff line number Diff line
@@ -627,6 +627,8 @@ static int perf_config_set__init(struct perf_config_set *set)
{
	int ret = -1;
	const char *home = NULL;
	char *user_config;
	struct stat st;

	/* Setting $PERF_CONFIG makes perf read _only_ the given config file. */
	if (config_exclusive_filename)
@@ -637,10 +639,16 @@ static int perf_config_set__init(struct perf_config_set *set)
	}

	home = getenv("HOME");
	if (perf_config_global() && home) {
		char *user_config = strdup(mkpath("%s/.perfconfig", home));
		struct stat st;

	/*
	 * Skip reading user config if:
	 *   - there is no place to read it from (HOME)
	 *   - we are asked not to (PERF_CONFIG_NOGLOBAL=1)
	 */
	if (!home || !*home || !perf_config_global())
		return 0;

	user_config = strdup(mkpath("%s/.perfconfig", home));
	if (user_config == NULL) {
		warning("Not enough memory to process %s/.perfconfig, "
			"ignoring it.", home);
@@ -663,9 +671,9 @@ static int perf_config_set__init(struct perf_config_set *set)

	if (st.st_size)
		ret = perf_config_from_file(collect_config, user_config, set);

out_free:
	free(user_config);
	}
out:
	return ret;
}