diff options
Diffstat (limited to 'help.c')
-rw-r--r-- | help.c | 77 |
1 files changed, 35 insertions, 42 deletions
@@ -144,11 +144,10 @@ static int is_executable(const char *name) return st.st_mode & S_IXUSR; } -static unsigned int list_commands_in_dir(struct cmdnames *cmds, +static void list_commands_in_dir(struct cmdnames *cmds, const char *path, const char *prefix) { - unsigned int longest = 0; int prefix_len; DIR *dir = opendir(path); struct dirent *de; @@ -156,7 +155,7 @@ static unsigned int list_commands_in_dir(struct cmdnames *cmds, int len; if (!dir) - return 0; + return; if (!prefix) prefix = "git-"; prefix_len = strlen(prefix); @@ -179,68 +178,62 @@ static unsigned int list_commands_in_dir(struct cmdnames *cmds, if (has_extension(de->d_name, ".exe")) entlen -= 4; - if (longest < entlen) - longest = entlen; - add_cmdname(cmds, de->d_name + prefix_len, entlen); } closedir(dir); strbuf_release(&buf); - - return longest; } -unsigned int load_command_list(const char *prefix, +void load_command_list(const char *prefix, struct cmdnames *main_cmds, struct cmdnames *other_cmds) { - unsigned int longest = 0; - unsigned int len; const char *env_path = getenv("PATH"); - char *paths, *path, *colon; const char *exec_path = git_exec_path(); - if (exec_path) - longest = list_commands_in_dir(main_cmds, exec_path, prefix); - - if (!env_path) { - fprintf(stderr, "PATH not set\n"); - exit(1); + if (exec_path) { + list_commands_in_dir(main_cmds, exec_path, prefix); + qsort(main_cmds->names, main_cmds->cnt, + sizeof(*main_cmds->names), cmdname_compare); + uniq(main_cmds); } - path = paths = xstrdup(env_path); - while (1) { - if ((colon = strchr(path, PATH_SEP))) - *colon = 0; - - len = list_commands_in_dir(other_cmds, path, prefix); - if (len > longest) - longest = len; + if (env_path) { + char *paths, *path, *colon; + path = paths = xstrdup(env_path); + while (1) { + if ((colon = strchr(path, PATH_SEP))) + *colon = 0; - if (!colon) - break; - path = colon + 1; - } - free(paths); + list_commands_in_dir(other_cmds, path, prefix); - qsort(main_cmds->names, main_cmds->cnt, - sizeof(*main_cmds->names), cmdname_compare); - uniq(main_cmds); + if (!colon) + break; + path = colon + 1; + } + free(paths); - qsort(other_cmds->names, other_cmds->cnt, - sizeof(*other_cmds->names), cmdname_compare); - uniq(other_cmds); + qsort(other_cmds->names, other_cmds->cnt, + sizeof(*other_cmds->names), cmdname_compare); + uniq(other_cmds); + } exclude_cmds(other_cmds, main_cmds); - - return longest; } -void list_commands(const char *title, unsigned int longest, - struct cmdnames *main_cmds, struct cmdnames *other_cmds) +void list_commands(const char *title, struct cmdnames *main_cmds, + struct cmdnames *other_cmds) { - const char *exec_path = git_exec_path(); + int i, longest = 0; + + for (i = 0; i < main_cmds->cnt; i++) + if (longest < main_cmds->names[i]->len) + longest = main_cmds->names[i]->len; + for (i = 0; i < other_cmds->cnt; i++) + if (longest < other_cmds->names[i]->len) + longest = other_cmds->names[i]->len; if (main_cmds->cnt) { + const char *exec_path = git_exec_path(); printf("available %s in '%s'\n", title, exec_path); printf("----------------"); mput_char('-', strlen(title) + strlen(exec_path)); |