svn commit: trunk/busybox/miscutils

vda at busybox.net vda at busybox.net
Sun Nov 16 04:05:13 UTC 2008


Author: vda
Date: 2008-11-15 20:05:13 -0800 (Sat, 15 Nov 2008)
New Revision: 24058

Log:
man: better check for duplicated MANPATH. Also -10 bytes.



Modified:
   trunk/busybox/miscutils/man.c


Changeset:
Modified: trunk/busybox/miscutils/man.c
===================================================================
--- trunk/busybox/miscutils/man.c	2008-11-15 21:33:14 UTC (rev 24057)
+++ trunk/busybox/miscutils/man.c	2008-11-16 04:05:13 UTC (rev 24058)
@@ -188,24 +188,40 @@
 		if (!token[1])
 			continue;
 		if (strcmp("MANPATH", token[0]) == 0) {
-			/* Do we already have it? */
-			char **path_element = man_path_list;
-			while (*path_element) {
-				if (strcmp(*path_element, token[1]) == 0)
-					goto skip;
-				path_element++;
+			char *path = token[1];
+			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) {
+					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) {
 			free(sec_list);
 			sec_list = xstrdup(token[1]);
 		}
- skip: ;
 	}
 	config_close(parser);
 
@@ -220,41 +236,34 @@
 		}
 		while ((cur_path = man_path_list[cur_mp++]) != NULL) {
 			/* 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;
-				do { /* for each section */
-					char *next_sect = strchrnul(cur_sect, ':');
-					int sect_len = next_sect - cur_sect;
-					char *man_filename;
-					int cat0man1 = 0;
+			cur_sect = sec_list;
+			do { /* for each section */
+				char *next_sect = strchrnul(cur_sect, ':');
+				int sect_len = next_sect - cur_sect;
+				char *man_filename;
+				int cat0man1 = 0;
 
-					/* Search for cat, then man page */
-					while (cat0man1 < 2) {
-						int found_here;
-						man_filename = xasprintf("%.*s/%s%.*s/%s.%.*s" Z_SUFFIX,
-								path_len, cur_path,
-								"cat\0man" + (cat0man1 * 4),
-								sect_len, cur_sect,
-								*argv,
-								sect_len, cur_sect);
-						found_here = show_manpage(pager, man_filename, cat0man1, 0);
-						found |= found_here;
-						cat0man1 += found_here + 1;
-						free(man_filename);
-					}
+				/* Search for cat, then man page */
+				while (cat0man1 < 2) {
+					int found_here;
+					man_filename = xasprintf("%s/%s%.*s/%s.%.*s" Z_SUFFIX,
+							cur_path,
+							"cat\0man" + (cat0man1 * 4),
+							sect_len, cur_sect,
+							*argv,
+							sect_len, cur_sect);
+					found_here = show_manpage(pager, man_filename, cat0man1, 0);
+					found |= found_here;
+					cat0man1 += found_here + 1;
+					free(man_filename);
+				}
 
-					if (found && !(opt & OPT_a))
-						goto next_arg;
-					cur_sect = next_sect;
-					while (*cur_sect == ':')
-						cur_sect++;
-				} while (*cur_sect);
-				cur_path = next_path;
-				while (*cur_path == ':')
-					cur_path++;
-			} while (*cur_path);
+				if (found && !(opt & OPT_a))
+					goto next_arg;
+				cur_sect = next_sect;
+				while (*cur_sect == ':')
+					cur_sect++;
+			} while (*cur_sect);
 		}
  check_found:
 		if (!found) {




More information about the busybox-cvs mailing list