From 9dcaace5075fd83463d9c3d57bc51123fdd1568d Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Tue, 11 Dec 2018 15:22:40 +0100 Subject: [PATCH 1/2] help.h: fix coding style We want a space after the `while` keyword. Signed-off-by: Johannes Schindelin --- help.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/help.h b/help.h index 9eab6a3f898f22..a141e209aea22b 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 850cd5d15abe5b8a4356efe86ba81bc032278dce Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Tue, 11 Dec 2018 15:01:47 +0100 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 --- help.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/help.c b/help.c index 4745b322993e6a..ff05fd22dff064 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);