mirror of
https://github.com/sheumann/hush.git
synced 2025-02-28 20:31:33 +00:00
man: better check for duplicated MANPATH. Also -10 bytes.
This commit is contained in:
parent
2479cd4a5d
commit
e88bd2d931
@ -188,24 +188,40 @@ int man_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
if (!token[1])
|
if (!token[1])
|
||||||
continue;
|
continue;
|
||||||
if (strcmp("MANPATH", token[0]) == 0) {
|
if (strcmp("MANPATH", token[0]) == 0) {
|
||||||
/* Do we already have it? */
|
char *path = token[1];
|
||||||
char **path_element = man_path_list;
|
while (*path) {
|
||||||
while (*path_element) {
|
char *next_path;
|
||||||
if (strcmp(*path_element, token[1]) == 0)
|
char **path_element;
|
||||||
goto skip;
|
|
||||||
path_element++;
|
next_path = strchr(path, ':');
|
||||||
|
if (next_path) {
|
||||||
|
*next_path = '\0';
|
||||||
|
if (next_path++ == path) /* "::"? */
|
||||||
|
goto next;
|
||||||
|
}
|
||||||
|
/* Do we already have path? */
|
||||||
|
path_element = man_path_list;
|
||||||
|
while (*path_element) {
|
||||||
|
if (strcmp(*path_element, path) == 0)
|
||||||
|
goto skip;
|
||||||
|
path_element++;
|
||||||
|
}
|
||||||
|
man_path_list = xrealloc_vector(man_path_list, 4, count_mp);
|
||||||
|
man_path_list[count_mp] = xstrdup(path);
|
||||||
|
count_mp++;
|
||||||
|
/* man_path_list is NULL terminated */
|
||||||
|
/*man_path_list[count_mp] = NULL; - xrealloc_vector did it */
|
||||||
|
skip:
|
||||||
|
if (!next_path)
|
||||||
|
break;
|
||||||
|
next:
|
||||||
|
path = next_path;
|
||||||
}
|
}
|
||||||
man_path_list = xrealloc_vector(man_path_list, 4, count_mp);
|
|
||||||
man_path_list[count_mp] = xstrdup(token[1]);
|
|
||||||
count_mp++;
|
|
||||||
/* man_path_list is NULL terminated */
|
|
||||||
/*man_path_list[count_mp] = NULL; - xrealloc_vector did it */
|
|
||||||
}
|
}
|
||||||
if (strcmp("MANSECT", token[0]) == 0) {
|
if (strcmp("MANSECT", token[0]) == 0) {
|
||||||
free(sec_list);
|
free(sec_list);
|
||||||
sec_list = xstrdup(token[1]);
|
sec_list = xstrdup(token[1]);
|
||||||
}
|
}
|
||||||
skip: ;
|
|
||||||
}
|
}
|
||||||
config_close(parser);
|
config_close(parser);
|
||||||
|
|
||||||
@ -220,41 +236,34 @@ int man_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
}
|
}
|
||||||
while ((cur_path = man_path_list[cur_mp++]) != NULL) {
|
while ((cur_path = man_path_list[cur_mp++]) != NULL) {
|
||||||
/* for each MANPATH */
|
/* for each MANPATH */
|
||||||
do { /* for each MANPATH item */
|
cur_sect = sec_list;
|
||||||
char *next_path = strchrnul(cur_path, ':');
|
do { /* for each section */
|
||||||
int path_len = next_path - cur_path;
|
char *next_sect = strchrnul(cur_sect, ':');
|
||||||
cur_sect = sec_list;
|
int sect_len = next_sect - cur_sect;
|
||||||
do { /* for each section */
|
char *man_filename;
|
||||||
char *next_sect = strchrnul(cur_sect, ':');
|
int cat0man1 = 0;
|
||||||
int sect_len = next_sect - cur_sect;
|
|
||||||
char *man_filename;
|
|
||||||
int cat0man1 = 0;
|
|
||||||
|
|
||||||
/* Search for cat, then man page */
|
/* Search for cat, then man page */
|
||||||
while (cat0man1 < 2) {
|
while (cat0man1 < 2) {
|
||||||
int found_here;
|
int found_here;
|
||||||
man_filename = xasprintf("%.*s/%s%.*s/%s.%.*s" Z_SUFFIX,
|
man_filename = xasprintf("%s/%s%.*s/%s.%.*s" Z_SUFFIX,
|
||||||
path_len, cur_path,
|
cur_path,
|
||||||
"cat\0man" + (cat0man1 * 4),
|
"cat\0man" + (cat0man1 * 4),
|
||||||
sect_len, cur_sect,
|
sect_len, cur_sect,
|
||||||
*argv,
|
*argv,
|
||||||
sect_len, cur_sect);
|
sect_len, cur_sect);
|
||||||
found_here = show_manpage(pager, man_filename, cat0man1, 0);
|
found_here = show_manpage(pager, man_filename, cat0man1, 0);
|
||||||
found |= found_here;
|
found |= found_here;
|
||||||
cat0man1 += found_here + 1;
|
cat0man1 += found_here + 1;
|
||||||
free(man_filename);
|
free(man_filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (found && !(opt & OPT_a))
|
if (found && !(opt & OPT_a))
|
||||||
goto next_arg;
|
goto next_arg;
|
||||||
cur_sect = next_sect;
|
cur_sect = next_sect;
|
||||||
while (*cur_sect == ':')
|
while (*cur_sect == ':')
|
||||||
cur_sect++;
|
cur_sect++;
|
||||||
} while (*cur_sect);
|
} while (*cur_sect);
|
||||||
cur_path = next_path;
|
|
||||||
while (*cur_path == ':')
|
|
||||||
cur_path++;
|
|
||||||
} while (*cur_path);
|
|
||||||
}
|
}
|
||||||
check_found:
|
check_found:
|
||||||
if (!found) {
|
if (!found) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user