man: better check for duplicated MANPATH. Also -10 bytes.
This commit is contained in:
		| @@ -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) { | ||||||
|  | 				char *next_path; | ||||||
|  | 				char **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) { | 				while (*path_element) { | ||||||
| 				if (strcmp(*path_element, token[1]) == 0) | 					if (strcmp(*path_element, path) == 0) | ||||||
| 						goto skip; | 						goto skip; | ||||||
| 					path_element++; | 					path_element++; | ||||||
| 				} | 				} | ||||||
| 				man_path_list = xrealloc_vector(man_path_list, 4, count_mp); | 				man_path_list = xrealloc_vector(man_path_list, 4, count_mp); | ||||||
| 			man_path_list[count_mp] = xstrdup(token[1]); | 				man_path_list[count_mp] = xstrdup(path); | ||||||
| 				count_mp++; | 				count_mp++; | ||||||
| 				/* man_path_list is NULL terminated */ | 				/* man_path_list is NULL terminated */ | ||||||
| 				/*man_path_list[count_mp] = NULL; - xrealloc_vector did it */ | 				/*man_path_list[count_mp] = NULL; - xrealloc_vector did it */ | ||||||
|  |  skip: | ||||||
|  | 				if (!next_path) | ||||||
|  | 					break; | ||||||
|  |  next: | ||||||
|  | 				path = next_path; | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 		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,9 +236,6 @@ 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 */ |  | ||||||
| 				char *next_path = strchrnul(cur_path, ':'); |  | ||||||
| 				int path_len = next_path - cur_path; |  | ||||||
| 			cur_sect = sec_list; | 			cur_sect = sec_list; | ||||||
| 			do { /* for each section */ | 			do { /* for each section */ | ||||||
| 				char *next_sect = strchrnul(cur_sect, ':'); | 				char *next_sect = strchrnul(cur_sect, ':'); | ||||||
| @@ -233,8 +246,8 @@ int man_main(int argc UNUSED_PARAM, char **argv) | |||||||
| 				/* 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, | ||||||
| @@ -251,10 +264,6 @@ int man_main(int argc UNUSED_PARAM, char **argv) | |||||||
| 				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) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user