diff options
Diffstat (limited to 'tools/lib/subcmd/help.c')
| -rw-r--r-- | tools/lib/subcmd/help.c | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/tools/lib/subcmd/help.c b/tools/lib/subcmd/help.c index bf02d62a3b2b..67a8d6b740ea 100644 --- a/tools/lib/subcmd/help.c +++ b/tools/lib/subcmd/help.c @@ -16,6 +16,8 @@  void add_cmdname(struct cmdnames *cmds, const char *name, size_t len)  {  	struct cmdname *ent = malloc(sizeof(*ent) + len + 1); +	if (!ent) +		return;  	ent->len = len;  	memcpy(ent->name, name, len); @@ -66,6 +68,7 @@ void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes)  	while (ci < cmds->cnt && ei < excludes->cnt) {  		cmp = strcmp(cmds->names[ci]->name, excludes->names[ei]->name);  		if (cmp < 0) { +			zfree(&cmds->names[cj]);  			cmds->names[cj++] = cmds->names[ci++];  		} else if (cmp == 0) {  			ci++; @@ -75,9 +78,12 @@ void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes)  		}  	} -	while (ci < cmds->cnt) +	while (ci < cmds->cnt) { +		zfree(&cmds->names[cj]);  		cmds->names[cj++] = cmds->names[ci++]; - +	} +	for (ci = cj; ci < cmds->cnt; ci++) +		zfree(&cmds->names[ci]);  	cmds->cnt = cj;  }  |