From 5acea87c3abfa5316fa27476c02e46eded8b26ae Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Tue, 11 Dec 2018 06:58:10 -0800 Subject: [PATCH 1/2] help.h: fix coding style We want a space after the `while` keyword. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- help.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/help.h b/help.h index 9eab6a3f89..a141e209ae 100644 --- a/help.h +++ b/help.h @@ -15,7 +15,7 @@ struct cmdnames { static inline void mput_char(char c, unsigned int num) { - while(num--) + while (num--) putchar(c); } From 1c4b985965a4c424e7e5ae4756e139c98183278d Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Tue, 11 Dec 2018 06:58:11 -0800 Subject: [PATCH 2/2] help -a: handle aliases with long names gracefully We take pains to determine the longest command beforehand, so that we can align the category column after printing the command names. However, then we re-use that value when printing the aliases. If any alias name is longer than the longest command name, we consequently try to add a negative number of spaces (but `mput_char()` does not expect any negative values and simply decrements until the value is 0, i.e. it tries to add close to 2**31 spaces). Let's fix this by adjusting the `longest` variable before printing the aliases. This fixes https://github.com/git-for-windows/git/issues/1975. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- help.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/help.c b/help.c index 4745b32299..ff05fd22df 100644 --- a/help.c +++ b/help.c @@ -83,8 +83,9 @@ static void print_command_list(const struct cmdname_help *cmds, for (i = 0; cmds[i].name; i++) { if (cmds[i].category & mask) { + size_t len = strlen(cmds[i].name); printf(" %s ", cmds[i].name); - mput_char(' ', longest - strlen(cmds[i].name)); + mput_char(' ', longest > len ? longest - len : 1); puts(_(cmds[i].help)); } } @@ -526,6 +527,13 @@ void list_all_cmds_help(void) git_config(get_alias, &alias_list); string_list_sort(&alias_list); + + for (i = 0; i < alias_list.nr; i++) { + size_t len = strlen(alias_list.items[i].string); + if (longest < len) + longest = len; + } + if (alias_list.nr) { printf("\n%s\n", _("Command aliases")); ALLOC_ARRAY(aliases, alias_list.nr + 1);