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

Commit 682f4f03 authored by Masami Hiramatsu's avatar Masami Hiramatsu Committed by Arnaldo Carvalho de Melo
Browse files

perf help: Do not use ALLOC_GROW in add_cmd_list



Replace ALLOC_GROW with normal realloc code in add_cmd_list() so that it
can handle errors directly.

Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20160510054752.6158.30562.stgit@devbox


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 11db4e29
Loading
Loading
Loading
Loading
+22 −8
Original line number Diff line number Diff line
@@ -27,16 +27,27 @@ static int levenshtein_compare(const void *p1, const void *p2)
	return l1 != l2 ? l1 - l2 : strcmp(s1, s2);
}

static void add_cmd_list(struct cmdnames *cmds, struct cmdnames *old)
static int add_cmd_list(struct cmdnames *cmds, struct cmdnames *old)
{
	unsigned int i;

	ALLOC_GROW(cmds->names, cmds->cnt + old->cnt, cmds->alloc);

	unsigned int i, nr = cmds->cnt + old->cnt;
	void *tmp;

	if (nr > cmds->alloc) {
		/* Choose bigger one to alloc */
		if (alloc_nr(cmds->alloc) < nr)
			cmds->alloc = nr;
		else
			cmds->alloc = alloc_nr(cmds->alloc);
		tmp = realloc(cmds->names, cmds->alloc * sizeof(*cmds->names));
		if (!tmp)
			return -1;
		cmds->names = tmp;
	}
	for (i = 0; i < old->cnt; i++)
		cmds->names[cmds->cnt++] = old->names[i];
	zfree(&old->names);
	old->cnt = 0;
	return 0;
}

const char *help_unknown_cmd(const char *cmd)
@@ -52,8 +63,11 @@ const char *help_unknown_cmd(const char *cmd)

	load_command_list("perf-", &main_cmds, &other_cmds);

	add_cmd_list(&main_cmds, &aliases);
	add_cmd_list(&main_cmds, &other_cmds);
	if (add_cmd_list(&main_cmds, &aliases) < 0 ||
	    add_cmd_list(&main_cmds, &other_cmds) < 0) {
		fprintf(stderr, "ERROR: Failed to allocate command list for unknown command.\n");
		goto end;
	}
	qsort(main_cmds.names, main_cmds.cnt,
	      sizeof(main_cmds.names), cmdname_compare);
	uniq(&main_cmds);
@@ -99,6 +113,6 @@ const char *help_unknown_cmd(const char *cmd)
		for (i = 0; i < n; i++)
			fprintf(stderr, "\t%s\n", main_cmds.names[i]->name);
	}

end:
	exit(1);
}